| 
| template<std::size_t Dim, typename TA , typename TB >  | 
| constexpr auto  | llama::operator== (ArrayIndex< TA, Dim > a, ArrayIndex< TB, Dim > b) -> bool | 
|   | 
| template<std::size_t Dim, typename TA , typename TB >  | 
| constexpr auto  | llama::operator!= (ArrayIndex< TA, Dim > a, ArrayIndex< TB, Dim > b) -> bool | 
|   | 
| template<typename... Args>  | 
|   | llama::ArrayIndex (Args...) -> ArrayIndex< typename internal::IndexTypeFromArgs< std::size_t, Args... >::type, sizeof...(Args)> | 
|   | 
| template<typename... Args>  | 
|   | llama::ArrayExtents (Args...) -> ArrayExtents< typename internal::IndexTypeFromArgs< std::size_t, Args... >::type,(Args{}, dyn)... > | 
|   | 
| template<typename SizeTypeA , SizeTypeA... SizesA, typename SizeTypeB , SizeTypeB... SizesB>  | 
| constexpr auto  | llama::operator== (ArrayExtents< SizeTypeA, SizesA... > a, ArrayExtents< SizeTypeB, SizesB... > b) -> bool | 
|   | 
| template<typename SizeTypeA , SizeTypeA... SizesA, typename SizeTypeB , SizeTypeB... SizesB>  | 
| constexpr auto  | llama::operator!= (ArrayExtents< SizeTypeA, SizesA... > a, ArrayExtents< SizeTypeB, SizesB... > b) -> bool | 
|   | 
| template<typename SizeType , SizeType... Sizes>  | 
| constexpr auto  | llama::product (ArrayExtents< SizeType, Sizes... > e) -> SizeType | 
|   | 
| template<typename SizeType , SizeType Extent, std::size_t... Is>  | 
| constexpr auto  | llama::internal::makeArrayExtents (std::index_sequence< Is... >) | 
|   | 
| template<typename SizeType , std::size_t Dim, typename Func , typename... OuterIndices>  | 
| void  | llama::forEachArrayIndex ([[maybe_unused]] const ArrayIndex< SizeType, Dim > &extents, Func &&func, OuterIndices... outerIndices) | 
|   | 
| template<typename SizeType , SizeType... Sizes, typename Func >  | 
| void  | llama::forEachArrayIndex (ArrayExtents< SizeType, Sizes... > extents, Func &&func) | 
|   |