std::extents, std::dextents

Defined in header <mdspan>
template< class IndexType, std::size_t... Extents >
class extents;
(1) (since C++23)
template< class IndexType, std::size_t Rank >
class dextents = /* see below */
(2) (since C++23)
1) Represents a multidimensional index space of rank equal to sizeof...(Extents).
2) A convenient alias template for an all-dynamic extents. Let d denote std::dynamic_extent, each specialization of it dextents<TypeIndex, Rank> is equivalent to extents<IndexType, /* d, d, ..., d (d repeats Rank times in total)*/>.

Each specialization of extents models regular and is TriviallyCopyable.

Template parameters

IndexType - the type of each non-dynamic Extents. Shall be a signed or unsigned integer type. Otherwise, the program is ill-formed.
Extents - represents extent (size of an integer interval) for each rank index. Each element of it is either equal to std::dynamic_extent (in this case, it represents a dynamic extent and the extent size will be determined dynamically), or is representable as a value of type IndexType (then it represents a static extent and the extent size is just the value of it), or else the program is ill-formed.
Rank - denotes the rank of an all-dynamic extents.

Member types

Member type Definition
index_type IndexType
size_type std::make_unsigned_t<index_type>
rank_type std::size_t

Data members

Typical implementations hold only one non-static data member:

  • dynamic-extents of type std::array<index_type, rank_dynamic()>, which stores the size of each dynamic extents. The name is for exposition only.

Member functions

constructs an extents
(public member function)
returns the static rank of an extents
(public static member function)
returns the dynamic rank of an extents
(public static member function)
returns static extent size of an extents at a certain rank index
(public static member function)
returns dynamic extent size of an extents at a certain rank index
(public member function)
Public exposition-only helpers
returns the product of extent size in range [0i)
(exposition-only member function)
returns the product of extents size in range [i + 1rank())
(exposition-only member function)
casts the input into an integer type
(exposition-only member function)
Private exposition-only helpers
returns the number of dynamic extents below a certain rank index
(exposition-only member function)
returns the number r such that in range [0r + 1) there is exactly i + 1 dynamic extents for a certain argument i
(exposition-only member function)

Non-member functions

compare underlying extents in each dimension of two extents

Deduction guides(C++23)


See also

obtains the number of dimensions of an array type
(class template)
obtains the size of an array type along a specified dimension
(class template)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.