20 General utilities library [utilities]

20.15 Metaprogramming and type traits [meta]

20.15.8 Transformations between types [meta.trans] Array modifications [meta.trans.arr]

Table 57: Array modifications [tab:meta.trans.arr]
template<class T>
struct remove_­extent;
If T names a type โ€œarray of Uโ€, the member typedef type shall be U, otherwise T.
[Note 1:
For multidimensional arrays, only the first array dimension is removed.
For a type โ€œarray of const Uโ€, the resulting type is const U.
โ€” end note]
template<class T>
struct remove_­all_­extents;
If T is โ€œmulti-dimensional array of Uโ€, the resulting member typedef type is U, otherwise T.
[Example 1: // the following assertions hold: assert((is_same_v<remove_extent_t<int>, int>)); assert((is_same_v<remove_extent_t<int[2]>, int>)); assert((is_same_v<remove_extent_t<int[2][3]>, int[3]>)); assert((is_same_v<remove_extent_t<int[][3]>, int[3]>)); โ€” end example]
[Example 2: // the following assertions hold: assert((is_same_v<remove_all_extents_t<int>, int>)); assert((is_same_v<remove_all_extents_t<int[2]>, int>)); assert((is_same_v<remove_all_extents_t<int[2][3]>, int>)); assert((is_same_v<remove_all_extents_t<int[][3]>, int>)); โ€” end example]