Пространства имён
Варианты
Действия

Заголовочный файл стандартной библиотеки <type_traits>

Материал из cppreference.com
< cpp‎ | header
 
 
 

Этот заголовочный файл является частью библиотеки поддержки типов.

Содержание

Классы

Вспомогательные классы
Константа времени компиляции указанного типа с указанным значением
(шаблон класса) [править]
true_type std::integral_constant<bool, true>
false_type std::integral_constant<bool, false>
Главные категории типов
(C++11)
Проверяет является ли тип void или нет
(шаблон класса) [править]
Проверяет является ли тип std::nullptr_t или нет
(шаблон класса) [править]
Проверяет является ли тип целочисленным или нет
(шаблон класса) [править]
Проверяет является ли тип типом с плавающей запятой или нет
(шаблон класса) [править]
(C++11)
Проверяет является ли тип типом массива или нет
(шаблон класса) [править]
(C++11)
Проверяет является ли тип типом перечисления или нет
(шаблон класса) [править]
(C++11)
Проверяет является ли тип типом объединения или нет
(шаблон класса) [править]
(C++11)
Проверяет является ли тип типом класса (но не объединения) или нет
(шаблон класса) [править]
Проверяет является ли тип типом функции или нет
(шаблон класса) [править]
Проверяет является ли тип типом указателя или нет
(шаблон класса) [править]
Проверяет является ли тип типом левосторонней ссылки или нет
(шаблон класса) [править]
Проверяет является ли тип правосторонней ссылкой или нет
(шаблон класса) [править]
Проверяет является ли тип типом указателя на нестатический член объекта или нет
(шаблон класса) [править]
Проверяет является ли тип типом указателя на нестатическую функцию-член или нет
(шаблон класса) [править]
Составные категории типов
Проверяет является ли тип фундаментальным или нет
(шаблон класса) [править]
Проверяет является ли тип арифметическим или нет
(шаблон класса) [править]
(C++11)
Проверяет является ли тип скалярным или нет
(шаблон класса) [править]
(C++11)
Проверяет является ли тип объектным или нет
(шаблон класса) [править]
Проверяет является ли тип составным или нет
(шаблон класса) [править]
Проверяет является ли тип или левосторонней, или правосторонней ссылкой или нет
(шаблон класса) [править]
Проверяет является ли тип указателем на нестатический член объекта
(шаблон класса) [править]
Свойства типов
(C++11)
Проверяет содержит ли тип в себе квалификатор const или нет
(шаблон класса) [править]
Проверяет содержит ли тип в себе квалификатор volatile или нет
(шаблон класса) [править]
Проверяет является ли тип тривиальным или нет
(шаблон класса) [править]
Проверяет является ли класс тривиальнокопируемым или нет
(шаблон класса) [править]
Проверяет имеет ли класс стандартную компоновку или нет
(шаблон класса) [править]
(C++11)
Проверяет является ли тип типом простой структуры данных или нет
(шаблон класса) [править]
Проверяет является ли тип литеральным или нет
(шаблон класса) [править]
(C++11)
Проверяет является ли тип классом (но не объединением), который не содержит в себе никаких данных или нет
(шаблон класса) [править]
Проверяет является ли тип типом полиморфного класса или нет
(шаблон класса) [править]
Проверяет является ли тип типом абстрактного класса или нет
(шаблон класса) [править]
(C++11)
Проверяет является ли тип знаковым арифметическим типом или нет
(шаблон класса) [править]
Проверяет является ли тип беззнаковым арифметическим типом или нет
(шаблон класса) [править]
Поддерживаемые операции
Проверяет имеет ли тип конструктор для конкретных аргументов или нет
(шаблон класса) [править]
Проверяет имеет ли тип конструктор по умолчанию или нет
(шаблон класса) [править]
Проверяет имеет ли тип конструктор копирования или нет
(шаблон класса) [править]
Проверяет имеет ли тип конструктор переноса или нет
(шаблон класса) [править]
Проверяет имеет ли тип оператор присваивания для конкретного аргумента или нет
(шаблон класса) [править]
Проверяет имеет ли тип оператор присваивания с копированием или нет
(шаблон класса) [править]
Проверяет имеет ли тип оператор присваивания с переносом или нет
(шаблон класса) [править]
Проверяет имеет ли тип не удалённый деструктор или нет
(шаблон класса) [править]
Проверяет имеет ли тип виртуальный деструктор или нет
(шаблон класса) [править]
Запросы свойств
Получает требования к выравниванию типа
(шаблон класса) [править]
(C++11)
Получает число измерений массива
(шаблон класса) [править]
(C++11)
Получает размер массива типа по указанному измерению
(шаблон класса) [править]
Взаимоотношения типов
(C++11)
Проверяет одинаковы ли два типа или нет
(шаблон класса) [править]
Проверяет наследуется ли тип от другого или нет
(шаблон класса) [править]
Проверяет может ли тип преобразован в другой или нет
(шаблон класса) [править]
Const-volatility квалификаторы
Удаляет const и/или volatile квалификаторы от данного типа
(шаблон класса) [править]
(C++11)
(C++11)
(C++11)
Добавляет const или/и volatile квалификаторы к данному типу
(шаблон класса) [править]
Ссылки
Удаляет ссылку из данного типа
(шаблон класса) [править]
Добавляет левостороннюю или правостороннюю ссылку
(шаблон класса) [править]
Указатели
Удаляет указатель от данного типа
(шаблон класса) [править]
Добавляет указатель на данный тип
(шаблон класса) [править]
Модификаторы знака
Делает данный целочисленный тип знаковым
(шаблон класса) [править]
Делает данный целочисленный тип беззнаковым
(шаблон класса) [править]
Массивы
Удаляет одно измерение от данного типа массива
(шаблон класса) [править]
Удаляет все измерения от данного типа массива
(шаблон класса) [править]
Различные преобразования
Определяет тип, подходящий для использования в качестве неинициализированного хранилища для типов заданного размера
(шаблон класса) [править]
Определяет тип, подходящий для использования в качестве неинициализированного хранилища для всех данных типов
(шаблон класса) [править]
(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;