template< class T >
struct rank;
If T
is an array type, provides the member constant value equal to the number of dimensions of the array. For any other type, value is â0â.
If the program adds specializations for std::rank
or std::rank_v
(since C++17), the behavior is undefined.
T
or zero
#include <type_traits> static_assert(std::rank<int>{} == 0); static_assert(std::rank<int[5]>{} == 1); static_assert(std::rank<int[5][5]>{} == 2); static_assert(std::rank<int[][5][5]>{} == 3); int main() { [[maybe_unused]] int ary[][3] = {{1, 2, 3}}; // The rank of reference type, e.g., ary[0], that is int(&)[3], is 0: static_assert(std::rank_v<decltype(ary[0])> == 0); static_assert(std::is_same_v<decltype(ary[0]), int(&)[3]>); // The solution is to remove the reference type. static_assert(std::rank_v<std::remove_cvref_t<decltype(ary[0])>> == 1); }[edit] See also checks if a type is an array type
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4