23 General utilities library [utilities]

23.15 Metaprogramming and type traits [meta]

23.15.5 Type property queries [meta.unary.prop.query]

Этот подпункт содержит шаблоны, которые могут использоваться для запроса свойств типов во время компиляции.

Таблица 43 - Введите запросы свойств
ШаблонЦенить
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]