Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Определяет шаблоны для констант времени компиляции, которые предоставляют сведения о свойствах аргументов типа или создают преобразованные типы.
Синтаксис
#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 | Создает базовый целочисленный тип для типа перечисления. |
Признаки логических операторов
| Имя | Описание |
|---|---|
| союз | |
| дизъюнкция | |
| отрицание |