Заголовочный файл стандартной библиотеки <type_traits>
Материал из cppreference.com
Этот заголовочный файл является частью библиотеки поддержки типов.
Классы | |
Вспомогательные классы | |
| (C++11) |
Константа времени компиляции указанного типа с указанным значением (шаблон класса) |
true_type
|
std::integral_constant<bool, true> |
false_type
|
std::integral_constant<bool, false> |
Главные категории типов | |
| (C++11) |
Проверяет является ли тип void или нет (шаблон класса) |
| (C++14) |
Проверяет является ли тип std::nullptr_t или нет (шаблон класса) |
| (C++11) |
Проверяет является ли тип целочисленным или нет (шаблон класса) |
| (C++11) |
Проверяет является ли тип типом с плавающей запятой или нет (шаблон класса) |
| (C++11) |
Проверяет является ли тип типом массива или нет (шаблон класса) |
| (C++11) |
Проверяет является ли тип типом перечисления или нет (шаблон класса) |
| (C++11) |
Проверяет является ли тип типом объединения или нет (шаблон класса) |
| (C++11) |
Проверяет является ли тип типом класса (но не объединения) или нет (шаблон класса) |
| (C++11) |
Проверяет является ли тип типом функции или нет (шаблон класса) |
| (C++11) |
Проверяет является ли тип типом указателя или нет (шаблон класса) |
| (C++11) |
Проверяет является ли тип типом левосторонней ссылки или нет (шаблон класса) |
| (C++11) |
Проверяет является ли тип правосторонней ссылкой или нет (шаблон класса) |
| (C++11) |
Проверяет является ли тип типом указателя на нестатический член объекта или нет (шаблон класса) |
| (C++11) |
Проверяет является ли тип типом указателя на нестатическую функцию-член или нет (шаблон класса) |
Составные категории типов | |
| (C++11) |
Проверяет является ли тип фундаментальным или нет (шаблон класса) |
| (C++11) |
Проверяет является ли тип арифметическим или нет (шаблон класса) |
| (C++11) |
Проверяет является ли тип скалярным или нет (шаблон класса) |
| (C++11) |
Проверяет является ли тип объектным или нет (шаблон класса) |
| (C++11) |
Проверяет является ли тип составным или нет (шаблон класса) |
| (C++11) |
Проверяет является ли тип или левосторонней, или правосторонней ссылкой или нет (шаблон класса) |
| (C++11) |
Проверяет является ли тип указателем на нестатический член объекта (шаблон класса) |
Свойства типов | |
| (C++11) |
Проверяет содержит ли тип в себе квалификатор const или нет (шаблон класса) |
| (C++11) |
Проверяет содержит ли тип в себе квалификатор volatile или нет (шаблон класса) |
| (C++11) |
Проверяет является ли тип тривиальным или нет (шаблон класса) |
| (C++11) |
Проверяет является ли класс тривиальнокопируемым или нет (шаблон класса) |
| (C++11) |
Проверяет имеет ли класс стандартную компоновку или нет (шаблон класса) |
| (C++11) |
Проверяет является ли тип типом простой структуры данных или нет (шаблон класса) |
| (C++11) |
Проверяет является ли тип литеральным или нет (шаблон класса) |
| (C++11) |
Проверяет является ли тип классом (но не объединением), который не содержит в себе никаких данных или нет (шаблон класса) |
| (C++11) |
Проверяет является ли тип типом полиморфного класса или нет (шаблон класса) |
| (C++11) |
Проверяет является ли тип типом абстрактного класса или нет (шаблон класса) |
| (C++11) |
Проверяет является ли тип знаковым арифметическим типом или нет (шаблон класса) |
| (C++11) |
Проверяет является ли тип беззнаковым арифметическим типом или нет (шаблон класса) |
Поддерживаемые операции | |
| (C++11) (C++11) (C++11) |
Проверяет имеет ли тип конструктор для конкретных аргументов или нет (шаблон класса) |
| Проверяет имеет ли тип конструктор по умолчанию или нет (шаблон класса) | |
| (C++11) (C++11) (C++11) |
Проверяет имеет ли тип конструктор копирования или нет (шаблон класса) |
| (C++11) (C++11) (C++11) |
Проверяет имеет ли тип конструктор переноса или нет (шаблон класса) |
| (C++11) (C++11) (C++11) |
Проверяет имеет ли тип оператор присваивания для конкретного аргумента или нет (шаблон класса) |
| (C++11) (C++11) (C++11) |
Проверяет имеет ли тип оператор присваивания с копированием или нет (шаблон класса) |
| (C++11) (C++11) (C++11) |
Проверяет имеет ли тип оператор присваивания с переносом или нет (шаблон класса) |
| (C++11) (C++11) (C++11) |
Проверяет имеет ли тип не удалённый деструктор или нет (шаблон класса) |
| (C++11) |
Проверяет имеет ли тип виртуальный деструктор или нет (шаблон класса) |
Запросы свойств | |
| (C++11) |
Получает требования к выравниванию типа (шаблон класса) |
| (C++11) |
Получает число измерений массива (шаблон класса) |
| (C++11) |
Получает размер массива типа по указанному измерению (шаблон класса) |
Взаимоотношения типов | |
| (C++11) |
Проверяет одинаковы ли два типа или нет (шаблон класса) |
| (C++11) |
Проверяет наследуется ли тип от другого или нет (шаблон класса) |
| (C++11) |
Проверяет может ли тип преобразован в другой или нет (шаблон класса) |
Const-volatility квалификаторы | |
| (C++11) (C++11) (C++11) |
Удаляет const и/или volatile квалификаторы от данного типа (шаблон класса) |
| (C++11) (C++11) (C++11) |
Добавляет const или/и volatile квалификаторы к данному типу (шаблон класса) |
Ссылки | |
| (C++11) |
Удаляет ссылку из данного типа (шаблон класса) |
| (C++11) (C++11) |
Добавляет левостороннюю или правостороннюю ссылку (шаблон класса) |
Указатели | |
| (C++11) |
Удаляет указатель от данного типа (шаблон класса) |
| (C++11) |
Добавляет указатель на данный тип (шаблон класса) |
Модификаторы знака | |
| (C++11) |
Делает данный целочисленный тип знаковым (шаблон класса) |
| (C++11) |
Делает данный целочисленный тип беззнаковым (шаблон класса) |
Массивы | |
| (C++11) |
Удаляет одно измерение от данного типа массива (шаблон класса) |
| (C++11) |
Удаляет все измерения от данного типа массива (шаблон класса) |
Различные преобразования | |
| (C++11) |
Определяет тип, подходящий для использования в качестве неинициализированного хранилища для типов заданного размера (шаблон класса) |
| (C++11) |
Определяет тип, подходящий для использования в качестве неинициализированного хранилища для всех данных типов (шаблон класса) |
| (C++11) |
Применяет преобразования как при передаче аргумента функции по значению (шаблон класса) |
| (C++11) |
Скрывает перегруженную функцию или специализацию класса, основываясь на логическом значении, известном в момент компиляции (шаблон класса) |
| (C++11) |
Выбирает один из двух типов в зависимости от логической константы времени компиляции (шаблон класса) |
| (C++11) |
Выводит общий для заданных типов тип (шаблон класса) |
| (C++11) |
Получает внутрилежащий целочисленный тип для данного типа перечисления (шаблон класса) |
| (C++11) |
Выводит возвращаемый тип при вызове функции (шаблон класса) |
[править] Определение
namespace std { // Вспомогательные типы: template <class T, T v> struct integral_constant; typedef integral_constant<bool, true> true_type; typedef integral_constant<bool, false> false_type; // Главные категории типов: template <class T> struct is_void; template <class T> struct is_null_pointer; template <class T> struct is_integral; template <class T> struct is_floating_point; template <class T> struct is_array; template <class T> struct is_pointer; template <class T> struct is_lvalue_reference; template <class T> struct is_rvalue_reference; template <class T> struct is_member_object_pointer; template <class T> struct is_member_function_pointer; template <class T> struct is_enum; template <class T> struct is_union; template <class T> struct is_class; template <class T> struct is_function; // Составные категории типов: template <class T> struct is_reference; template <class T> struct is_arithmetic; template <class T> struct is_fundamental; template <class T> struct is_object; template <class T> struct is_scalar; template <class T> struct is_compound; template <class T> struct is_member_pointer; // Свойства типов: template <class T> struct is_const; template <class T> struct is_volatile; template <class T> struct is_trivial; template <class T> struct is_trivially_copyable; template <class T> struct is_standard_layout; template <class T> struct is_pod; template <class T> struct is_literal_type; template <class T> struct is_empty; template <class T> struct is_polymorphic; template <class T> struct is_abstract; template <class T> struct is_signed; template <class T> struct is_unsigned; template <class T, class... Args> struct is_constructible; template <class T> struct is_default_constructible; template <class T> struct is_copy_constructible; template <class T> struct is_move_constructible; template <class T, class U> struct is_assignable; template <class T> struct is_copy_assignable; template <class T> struct is_move_assignable; template <class T> struct is_destructible; template <class T, class... Args> struct is_trivially_constructible; template <class T> struct is_trivially_default_constructible; template <class T> struct is_trivially_copy_constructible; template <class T> struct is_trivially_move_constructible; template <class T, class U> struct is_trivially_assignable; template <class T> struct is_trivially_copy_assignable; template <class T> struct is_trivially_move_assignable; template <class T> struct is_trivially_destructible; template <class T, class... Args> struct is_nothrow_constructible; template <class T> struct is_nothrow_default_constructible; template <class T> struct is_nothrow_copy_constructible; template <class T> struct is_nothrow_move_constructible; template <class T, class U> struct is_nothrow_assignable; template <class T> struct is_nothrow_copy_assignable; template <class T> struct is_nothrow_move_assignable; template <class T> struct is_nothrow_destructible; template <class T> struct has_virtual_destructor; // Запросы свойств типов: template <class T> struct alignment_of; template <class T> struct rank; template <class T, unsigned I = 0> struct extent; // Взаимоотношения типов: template <class T, class U> struct is_same; template <class Base, class Derived> struct is_base_of; template <class From, class To> struct is_convertible; // const-volatile модификаторы: template <class T> struct remove_const; template <class T> struct remove_volatile; template <class T> struct remove_cv; template <class T> struct add_const; template <class T> struct add_volatile; template <class T> struct add_cv; template <class T> using remove_const_t = typename remove_const<T>::type; template <class T> using remove_volatile_t = typename remove_volatile<T>::type; template <class T> using remove_cv_t = typename remove_cv<T>::type; template <class T> using add_const_t = typename add_const<T>::type; template <class T> using add_volatile_t = typename add_volatile<T>::type; template <class T> using add_cv_t = typename add_cv<T>::type; // Модификаторы ссылки: template <class T> struct remove_reference; template <class T> struct add_lvalue_reference; template <class T> struct add_rvalue_reference; template <class T> using remove_reference_t = typename remove_reference<T>::type; template <class T> using add_lvalue_reference_t = typename add_lvalue_reference<T>::type; template <class T> using add_rvalue_reference_t = typename add_rvalue_reference<T>::type; // Модификаторы знака: template <class T> struct make_signed; template <class T> struct make_unsigned; template <class T> using make_signed_t = typename make_signed<T>::type; template <class T> using make_unsigned_t = typename make_unsigned<T>::type; // Изменение массивов: template <class T> struct remove_extent; template <class T> struct remove_all_extents; template <class T> using remove_extent_t = typename remove_extent<T>::type; template <class T> using remove_all_extents_t = typename remove_all_extents<T>::type; // Изменение указателей: template <class T> struct remove_pointer; template <class T> struct add_pointer; template <class T> using remove_pointer_t = typename remove_pointer<T>::type; template <class T> using add_pointer_t = typename add_pointer<T>::type; // Прочие преобразования: template <std::size_t Len, std::size_t Align = /*выравнивание по умолчанию*/> struct aligned_storage; template <class T> struct decay; template <bool, class T = void> struct enable_if; template <bool, class T, class F> struct conditional; template <class... T> struct common_type; template <class T> struct underlying_type; template <class> class result_of; // не определено template <class F, class... ArgTypes> class result_of<F(ArgTypes...)>; template <std::size_t Len, std::size_t Align = /*выравнивание по умолчанию*/> using aligned_storage_t = typename aligned_storage<Len,Align>::type; template <std::size_t Len, class... Types> using aligned_union_t = typename aligned_union<Len,Types...>::type; template <class T> using decay_t = typename decay<T>::type; template <bool b, class T = void> using enable_if_t = typename enable_if<b,T>::type; template <bool b, class T, class F> using conditional_t = typename conditional<b,T,F>::type; template <class... T> using common_type_t = typename common_type<T...>::type; template <class T> using underlying_type_t = typename underlying_type<T>::type; template <class T> using result_of_t = typename result_of<T>::type; } // namespace std
[править] Класс std::integral_constant
template <class T, T v> struct integral_constant { static constexpr T value = v; typedef T value_type; typedef integral_constant<T,v> type; constexpr operator value_type() const noexcept { return value; } constexpr value_type operator()() const noexcept { return value; } //с c++14 }; typedef integral_constant<bool, true> true_type; typedef integral_constant<bool, false> false_type;

