<type_traits>
Определяет шаблоны для констант времени компиляции, которые предоставляют сведения о свойствах аргументов типа или создают преобразованные типы.
Синтаксис
#include <type_traits>
Замечания
Классы и шаблоны в <type_traits> используются для поддержки вывода типов, классификации и преобразования во время компиляции. Они также используются для обнаружения ошибок, связанных с типом, и для оптимизации универсального кода. Унарные признаки типов описывают свойство типа, признаки двоичного типа описывают связь между типами и признаки преобразования изменяют свойство типа.
Вспомогательный класс integral_constant
и его специализации шаблона и false_type
формируйте базовые классы true_type
для предикатов типов. Предикат типа — это шаблон, принимающий один или несколько аргументов типа. Если предикат типа имеет значение true, он является общедоступным, прямо или косвенно, от true_type. Если предикат типа содержит false, он является общедоступным, прямо или косвенно, от false_type.
Модификатор типа или признак преобразования — это шаблон, принимающий один или несколько аргументов шаблона и имеющий один член (type
), который является синонимом для измененного типа.
Шаблоны псевдонимов
Чтобы упростить выражения признаков типа, предоставляются шаблоны typename some_trait<T>::type
псевдонимов, в которых some_trait имя шаблона класса. Например, add_const имеет шаблон псевдонима для своего типа, add_const_t
, определяемого следующим образом.
template <class T>
using add_const_t = typename add_const<T>::type;
Это указанные псевдонимы для type
членов:
add_const_t
add_cv_t
add_lvalue_reference_t
add_pointer_t
add_rvalue_reference_t
add_volatile_t
aligned_storage_t
aligned_union_t
\
common_type_t
conditional_t
decay_t
enable_if_t
invoke_result_t
make_signed_t
make_unsigned_t
remove_all_extents_t
\
remove_const_t
remove_cv_t
remove_extent_t
remove_pointer_t
remove_reference_t
remove_volatile_t
result_of_t
underlying_type_t
\
Классы
Вспомогательный класс и определения типов
Имя | Описание |
---|---|
integral_constant | Создает целочисленную константу из типа и значения. |
true_type | Содержит целочисленную константу со значением true. |
false_type | Содержит целочисленную константу со значением false. |
Категории основных типов
Имя | Описание |
---|---|
is_void | Проверяет, является ли тип типом void . |
is_null_pointer | Проверяет, является ли тип типом std::nullptr_t . |
is_integral | Проверяет, является ли тип целочисленным. |
is_floating_point | Проверяет, является ли тип вещественным (с плавающей запятой). |
is_array | Проверяет, является ли тип массивом. |
is_pointer | Проверяет, является ли тип указателем. |
is_lvalue_reference | Проверяет, является ли тип ссылкой lvalue. |
is_rvalue_reference | Проверяет, является ли тип ссылкой rvalue. |
is_member_object_pointer | Проверяет, является ли тип указателем на объект-член. |
is_member_function_pointer | Проверяет, является ли тип указателем на функцию-член. |
is_enum | Проверяет, является ли тип перечислением. |
is_union | Проверяет, является ли тип объединением. |
is_class | Проверяет, является ли тип классом. |
is_function | Проверяет, является ли тип типом функции. |
Категории составных типов
Имя | Описание |
---|---|
is_reference | Проверяет, является ли тип ссылкой. |
is_arithmetic | Проверяет, является ли тип арифметическим. |
is_fundamental | Проверяет, является ли тип void или арифметическим типом. |
is_object | Проверяет, является ли тип типом объекта. |
is_scalar | Проверяет, является ли тип скалярным. |
is_compound | Проверяет, является ли тип нескалярным. |
is_member_pointer | Проверяет, является ли тип указателем на член. |
Свойства типа
Имя | Описание |
---|---|
is_const | Проверяет, является ли тип типом const . |
is_volatile | Проверяет, является ли тип типом volatile . |
is_trivial | Проверяет, является ли тип простейшим. |
is_trivially_copyable | Проверяет, является ли тип тривиально копируемым. |
is_standard_layout | Проверяет, является ли тип стандартным макетом. |
is_pod | Проверяет, является ли тип типом POD. |
is_literal_type | Проверяет, может ли тип быть переменной constexpr или использоваться в функции constexpr . |
is_empty | Проверяет, является ли тип пустым классом. |
is_polymorphic | Проверяет, является ли тип полиморфным классом. |
is_abstract | Проверяет, является ли тип абстрактным классом. |
is_final | Проверяет, является ли тип типом класса, отмеченным final . |
is_aggregate | |
is_signed | Проверяет, является ли тип знаковым целочисленным типом. |
is_unsigned | Проверяет, является ли тип беззнаковым целочисленным типом. |
is_constructible | Проверяет, можно ли сконструировать тип с использованием заданных типов аргументов. |
is_default_constructible | Проверяет, имеет ли тип конструктор по умолчанию. |
is_copy_constructible | Проверяет, имеет ли тип конструктор копирования. |
is_move_constructible | Проверяет, имеет ли тип конструктор перемещения. |
is_assignable | Проверяет, можно ли первому типу назначить значение второго типа. |
is_copy_assignable | Проверяет, можно ли типу назначить значение ссылки константы типа. |
is_move_assignable | Проверяет, можно ли типу назначить ссылку rvalue типа. |
is_swappable | |
is_swappable_with | |
is_destructible | Проверяет, можно ли уничтожить тип. |
is_trivially_constructible | Проверяет, использует ли тип нетривиальные операции, если создан с использованием заданных типов. |
is_trivially_default_constructible | Проверяет, использует ли тип нетривиальные операции, если создан конструктором по умолчанию. |
is_trivially_copy_constructible | Проверяет, использует ли тип нетривиальные операции, если создан конструктором копирования. |
is_trivially_move_constructible | Проверяет, использует ли тип нетривиальные операции, если создан конструктором перемещения. |
is_trivially_assignable | Проверяет, можно ли типам присвоить значение и использует ли назначение нетривиальные операции. |
is_trivially_copy_assignable | Проверяет, можно ли типам присвоить значение копирования и использует ли назначение нетривиальные операции. |
is_trivially_move_assignable | Проверяет, можно ли типам присвоить значение перемещения и использует ли назначение нетривиальные операции. |
is_trivially_destructible | Проверяет, является ли тип разрушаемым и использует ли деструктор нетривиальные операции. |
is_nothrow_constructible | Проверяет, является ли тип конструируемым и известно ли, что он не выдает исключение, если создан с использованием заданных типов. |
is_nothrow_default_constructible | Проверяет, является ли тип конструируемым по умолчанию и известно ли, что он не выдает исключение, если создан конструктором по умолчанию. |
is_nothrow_copy_constructible | Проверяет, можно ли создать тип с помощью конструктора копирования и известно ли, что конструктор копирования не создаст исключения. |
is_nothrow_move_constructible | Проверяет, можно ли создать тип с помощью конструктора перемещения и известно ли, что конструктор перемещения не создаст исключения. |
is_nothrow_assignable | Проверяет, является ли тип назначаемым с использованием определенного типа и известно ли, что назначение не создаст исключения. |
is_nothrow_copy_assignable | Проверяет, является ли тип назначаемым с использованием типа копирования и известно ли, что назначение не создаст исключения. |
is_nothrow_move_assignable | Проверяет, является ли тип назначаемым с использованием типа перемещения и известно ли, что назначение не создаст исключения. |
is_nothrow_swappable | |
is_nothrow_swappable_with | |
is_nothrow_destructible | Проверяет, является ли тип уничтожаемым и известно ли, что деструктор не создаст исключения. |
has_virtual_destructor |
Проверяет, есть ли у типа виртуальный деструктор. |
has_unique_object_representations |
|
is_invocable | Проверяет, можно ли вызывать вызываемый тип с помощью указанных типов аргументов. Добавлено в C++17. |
is_invocable_r | Проверяет, можно ли вызывать вызываемый тип с помощью указанных типов аргументов, и результат преобразуется в указанный тип. Добавлено в C++17. |
is_nothrow_invocable | Проверяет, может ли вызываемый тип вызываться с помощью указанных типов аргументов и не вызывает исключений. Добавлено в C++17. |
is_nothrow_invocable_r | Проверяет, может ли вызываемый тип вызываться с помощью указанных типов аргументов и не вызывает исключений, а результат преобразуется в указанный тип. Добавлено в C++17. |
Запросы свойств типов
Имя | Описание |
---|---|
alignment_of | Получает выравнивание типа. |
rank | Получает количество измерений массива. |
extent | Получает количество элементов в заданном измерении массива. |
Связи типов
Имя | Описание |
---|---|
is_same | Определяет, совпадают ли два типа. |
is_base_of | Проверяет, является ли один тип базовым для другого. |
is_convertible | Проверяет, можно ли преобразовать один тип в другой. |
Изменения const или volatile
Имя | Описание |
---|---|
add_const | Создает тип const из типа. |
add_volatile | Создает тип volatile из типа. |
add_cv | Создает тип const volatile из типа. |
remove_const | Создает отличный от const тип из типа. |
remove_volatile | Создает отличный от volatile тип из типа. |
remove_cv | Создает отличный от const и volatile тип из типа. |
Изменения ссылок
Имя | Описание |
---|---|
add_lvalue_reference | Создает ссылку на тип из типа. |
add_rvalue_reference | Создает ссылку rvalue на тип из типа |
remove_reference | Делает нессылочный тип из типа. |
Изменения знаков
Имя | Описание |
---|---|
make_signed | Создает тип, если знак присутствует, или наименьший знаковый тип, размер которого не меньше размера типа. |
make_unsigned | Создает тип, если знак отсутствует, или наименьший беззнаковый тип, размер которого не меньше размера типа. |
Изменения массивов
Имя | Описание |
---|---|
remove_all_extents | Создает отличный от массива тип из типа массива. |
remove_extent | Создает тип элемента из типа массива. |
Изменения указателей
Имя | Описание |
---|---|
add_pointer | Создает указатель на тип из типа. |
remove_pointer | Создает тип из указателя на тип. |
Другие преобразования
Имя | Описание |
---|---|
aligned_storage | Выделяет неинициализированную память для выровненного типа. |
aligned_union | Выделяет неинициализированную память для выровненного объединения с нетривиальным конструктором или деструктором. |
common_type | Создает общий тип для всех типов параметров пакета. |
conditional | Если условие имеет значение true, создает первый заданный тип; в противном случае — второй заданный тип. |
decay | Создает тип в качестве передаваемого значения. Создает нессылочный, неконстантный или долговременный тип либо указатель на тип. |
enable_if | Если условие имеет значение true, создает заданный тип; в противном случае — не создает тип. |
invoke_result | Определяет возвращаемый тип вызываемого типа, который принимает заданные типы аргументов. Добавлено в C++17. |
result_of | Определяет возвращаемый тип вызываемого типа, который принимает заданные типы аргументов. Добавлено в C++14, устарело в C++17. |
underlying_type | Создает базовый целочисленный тип для типа перечисления. |
Признаки логических операторов
Имя | Описание |
---|---|
союз | |
дизъюнкция | |
отрицание |