Этот подпункт содержит шаблоны, которые могут использоваться для запроса свойств типов во время компиляции.
Шаблон | Ценить |
template <class T> struct alignment_of; |
alignof(T). Requires: alignof(T) должно быть допустимым выражением ([expr.alignof]) |
template <class T> struct rank; | Если T именует тип массива, целочисленное значение, представляющее количество измерений T; в противном случае 0. |
template <class T, unsigned I = 0> struct extent; | Если T это не тип массива, или если его ранг меньше или равен I, или если он I равен 0 и T имеет тип «массив с неизвестной границей U», то 0; в противном случае граница ([dcl.array]) I'го измерения T, где индексирование отсчитывается от I нуля |
Каждый из этих шаблонов должен иметь UnaryTypeTrait базовую характеристику integral_constant<size_t, Value>.
[ Example:
// the following assertions hold:
assert(rank_v<int> == 0);
assert(rank_v<int[2]> == 1);
assert(rank_v<int[][4]> == 2);
— end example ]
[ Example:
// the following assertions hold:
assert(extent_v<int> == 0);
assert(extent_v<int[2]> == 2);
assert(extent_v<int[2][4]> == 2);
assert(extent_v<int[][4]> == 0);
assert((extent_v<int, 1>) == 0);
assert((extent_v<int[2], 1>) == 0);
assert((extent_v<int[2][4], 1>) == 4);
assert((extent_v<int[][4], 1>) == 4);
— end example ]