<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 Создает базовый целочисленный тип для типа перечисления.

Признаки логических операторов

Имя Описание
Сочетании
дисъюнкция
Отрицание

См. также

<functional>