Namespaces
Variants

Standard library header <type_traits> (C++11)

From cppreference.net
Standard library headers

Этот заголовок является частью библиотеки метапрограммирования .

Содержание

Классы

Вспомогательные Классы
константа времени компиляции указанного типа с указанным значением
(шаблон класса)
true_type std:: integral_constant < bool , true >
false_type std:: integral_constant < bool , false >
Основные категории типов
(C++11)
проверяет, является ли тип void
(шаблон класса)
(C++11) ( DR* )
проверяет, является ли тип std::nullptr_t
(шаблон класса)
проверяет, является ли тип целочисленным типом
(шаблон класса)
проверяет, является ли тип типом с плавающей запятой
(шаблон класса)
(C++11)
проверяет, является ли тип массивом
(шаблон класса)
(C++11)
проверяет, является ли тип перечислением
(шаблон класса)
(C++11)
проверяет, является ли тип объединением
(шаблон класса)
(C++11)
проверяет, является ли тип классом (не объединением)
(шаблон класса)
проверяет, является ли тип функциональным типом
(шаблон класса)
(C++11)
проверяет, является ли тип указателем
(шаблон класса)
проверяет, является ли тип lvalue reference
(шаблон класса)
проверяет, является ли тип rvalue reference
(шаблон класса)
проверяет, является ли тип указателем на нестатический член-объект
(шаблон класса)
проверяет, является ли тип указателем на нестатическую функцию-член
(шаблон класса)
Категории составных типов
проверяет, является ли тип фундаментальным типом
(шаблон класса)
проверяет, является ли тип арифметическим типом
(шаблон класса)
(C++11)
проверяет, является ли тип скалярным типом
(шаблон класса)
(C++11)
проверяет, является ли тип объектным типом
(шаблон класса)
проверяет, является ли тип составным типом
(шаблон класса)
проверяет, является ли тип lvalue reference или rvalue reference
(шаблон класса)
проверяет, является ли тип указателем на нестатическую функцию-член или объект
(шаблон класса)
Свойства типов
(C++11)
проверяет, является ли тип константно-квалифицированным
(шаблон класса)
проверяет, является ли тип квалифицированным как volatile
(шаблон класса)
(C++11) (устарело в C++26)
проверяет, является ли тип тривиальным
(шаблон класса)
проверяет, является ли тип тривиально копируемым
(шаблон класса)
проверяет, является ли тип стандартным расположением
(шаблон класса)
(C++11) (deprecated in C++20)
проверяет, является ли тип простым типом данных (POD)
(шаблон класса)
(C++11) (deprecated in C++17) (removed in C++20)
проверяет, является ли тип литеральным типом
(шаблон класса)
проверяет, что каждый бит в объектном представлении типа влияет на его значение
(шаблон класса)
(C++11)
проверяет, является ли тип классом (но не объединением) и не имеет нестатических членов данных
(шаблон класса)
проверяет, является ли тип полиморфным классом
(шаблон класса)
проверяет, является ли тип абстрактным классом
(шаблон класса)
(C++14)
проверяет, является ли тип финальным классом
(шаблон класса)
проверяет, является ли тип агрегатным типом
(шаблон класса)
проверяет, является ли тип типом с неявным временем жизни
(шаблон класса)
(C++11)
проверяет, является ли тип знаковым арифметическим типом
(шаблон класса)
проверяет, является ли тип беззнаковым арифметическим типом
(шаблон класса)
проверяет, является ли тип типом массива с известной границей
(шаблон класса)
проверяет, является ли тип массивом неизвестной границы
(шаблон класса)
проверяет, является ли тип scoped enumeration
(шаблон класса)
Поддерживаемые операции
проверяет, имеет ли тип конструктор для определенных аргументов
(шаблон класса)
проверяет, имеет ли тип конструктор по умолчанию
(шаблон класса)
проверяет, имеет ли тип конструктор копирования
(шаблон класса)
проверяет, может ли тип быть сконструирован из rvalue-ссылки
(шаблон класса)
проверяет, имеет ли тип оператор присваивания для определенного аргумента
(шаблон класса)
проверяет, имеет ли тип оператор копирующего присваивания
(шаблон класса)
проверяет, имеет ли тип оператор перемещающего присваивания
(шаблон класса)
проверяет, имеет ли тип неудаленный деструктор
(шаблон класса)
проверяет, имеет ли тип виртуальный деструктор
(шаблон класса)
проверяет, могут ли объекты типа быть обменены с объектами того же или другого типа
(шаблон класса)
проверяет, связана ли ссылка с временным объектом при копирующей инициализации
(шаблон класса)
проверяет, связана ли ссылка с временным объектом при прямой инициализации
(шаблон класса)
Запросы свойств
получает требования к выравниванию типа
(шаблон класса)
(C++11)
получает количество измерений типа массива
(шаблон класса)
(C++11)
получает размер типа массива по указанному измерению
(шаблон класса)
Отношения между типами
(C++11)
проверяет, являются ли два типа одинаковыми
(шаблон класса)
(C++11)
проверяет, является ли один тип базовым для другого типа
(шаблон класса)
проверяет, является ли тип виртуальным базовым классом другого типа
(шаблон класса)
проверяет, может ли тип быть преобразован в другой тип
(шаблон класса)
проверяет, являются ли два типа layout-compatible
(шаблон класса)
проверяет, является ли тип pointer-interconvertible (начальным) базовым классом другого типа
(шаблон класса)
проверяет, может ли тип быть вызван (как с помощью std::invoke ) с заданными типами аргументов
(шаблон класса)
Спецификаторы константности и волатильности
удаляет const и/или volatile спецификаторы из заданного типа
(шаблон класса)
(C++11) (C++11) (C++11)
добавляет const и/или volatile спецификаторы к заданному типу
(шаблон класса)
Ссылки
удаляет ссылку из заданного типа
(шаблон класса)
добавляет lvalue или rvalue ссылку к заданному типу
(шаблон класса)
Указатели
удаляет указатель из заданного типа
(шаблон класса)
добавляет указатель к заданному типу
(шаблон класса)
Модификаторы знака
получает соответствующий знаковый тип для заданного целочисленного типа
(шаблон класса)
получает соответствующий беззнаковый тип для заданного целочисленного типа
(шаблон класса)
Массивы
удаляет одну размерность из заданного типа массива
(шаблон класса)
удаляет все размерности из заданного типа массива
(шаблон класса)
Различные преобразования
(since C++11) (deprecated in C++23)
определяет тип, подходящий для использования в качестве неинициализированного хранилища для типов заданного размера
(шаблон класса)
(since C++11) (deprecated in C++23)
определяет тип, подходящий для использования в качестве неинициализированного хранилища для всех заданных типов
(шаблон класса)
(C++11)
применяет преобразования типов, как при передаче аргумента функции по значению
(шаблон класса)
объединяет std::remove_cv и std::remove_reference
(шаблон класса)
(C++11)
условно удаляет перегрузку функции или специализацию шаблона из разрешения перегрузки
(шаблон класса)
выбирает один из двух типов на основе булевого значения времени компиляции
(шаблон класса)
определяет общий тип группы типов
(шаблон класса)
определяет общий ссылочный тип группы типов
(шаблон класса)
получает базовый целочисленный тип для заданного типа перечисления
(шаблон класса)
(C++11) (удалено в C++20) (C++17)
определяет тип результата вызова вызываемого объекта с набором аргументов
(шаблон класса)
(C++17)
void вариативный псевдоним шаблона
(псевдоним шаблона)
возвращает аргумент типа без изменений
(шаблон класса)
получить тип ссылки, обернутый в std::reference_wrapper
(шаблон класса)
Операции над трейтами
вариадическая логическая AND метафункция
(шаблон класса)
вариадическая логическая ИЛИ метафункция
(шаблон класса)
(C++17)
метафункция логического НЕ
(шаблон класса)

Функции

Отношения между членами
проверяет, являются ли объекты типа pointer-interconvertible с указанным подобъектом этого типа
(шаблон функции)
проверяет, соответствуют ли два указанных члена друг другу в общей начальной подпоследовательности двух указанных типов
(шаблон функции)
Контекст константного вычисления
определяет, происходит ли вызов в контексте константного вычисления
(функция)
проверяет, находится ли указатель в пределах времени жизни объекта во время компиляции
(функция)

Синопсис

namespace std {
  // вспомогательный класс
  template<class T, T v> struct integral_constant;
  template<bool B>
    using bool_constant = integral_constant<bool, B>;
  using true_type  = bool_constant<true>;
  using false_type = bool_constant<false>;
  // основные категории типов
  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_empty;
  template<class T> struct is_polymorphic;
  template<class T> struct is_abstract;
  template<class T> struct is_final;
  template<class T> struct is_aggregate;
  template<class T> struct is_signed;
  template<class T> struct is_unsigned;
  template<class T> struct is_bounded_array;
  template<class T> struct is_unbounded_array;
  template<class T> struct is_scoped_enum;
  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, class U> struct is_swappable_with;
  template<class T> struct is_swappable;
  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, class U> struct is_nothrow_swappable_with;
  template<class T> struct is_nothrow_swappable;
  template<class T> struct is_nothrow_destructible;
  template<class T> struct has_virtual_destructor;
  template<class T> struct has_unique_object_representations;
  template<class T, class U> struct reference_constructs_from_temporary;
  template<class T, class U> struct reference_converts_from_temporary;
  // запросы свойств типов
  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 Base, class Derived> struct is_virtual_base_of;
  template<class From, class To> struct is_convertible;
  template<class From, class To> struct is_nothrow_convertible;
  template<class T, class U> struct is_layout_compatible;
  template<class Base, class Derived> struct is_pointer_interconvertible_base_of;
  template<class Fn, class... ArgTypes> struct is_invocable;
  template<class R, class Fn, class... ArgTypes> struct is_invocable_r;
  template<class Fn, class... ArgTypes> struct is_nothrow_invocable;
  template<class R, class Fn, class... ArgTypes> struct is_nothrow_invocable_r;
  // 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<class T> struct type_identity;
  template<class T> struct remove_cvref;
  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, class U, template<class> class TQual, template<class> class UQual>
    struct basic_common_reference { };
  template<class... T> struct common_reference;
  template<class T> struct underlying_type;
  template<class Fn, class... ArgTypes> struct invoke_result;
  template<class T> struct unwrap_reference;
  template<class T> struct unwrap_ref_decay;
  template<class T>
    using type_identity_t    = typename type_identity<T>::type;
  template<class T>
    using remove_cvref_t     = typename remove_cvref<T>::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 common_reference_t = typename common_reference<T...>::type;
  template<class T>
    using underlying_type_t  = typename underlying_type<T>::type;
  template<class Fn, class... ArgTypes>
    using invoke_result_t    = typename invoke_result<Fn, ArgTypes...>::type;
  template<class T>
    using unwrap_reference_t = typename unwrap_reference<T>::type;
  template<class T>
    using unwrap_ref_decay_t = typename unwrap_ref_decay<T>::type;
  template<class...>
    using void_t             = void;
  // логические операторы traits
  template<class... B> struct conjunction;
  template<class... B> struct disjunction;
  template<class B> struct negation;
  // основные категории типов
  template<class T>
    inline constexpr bool is_void_v = is_void<T>::значение;
  template<class T>
    inline constexpr bool is_null_pointer_v = is_null_pointer<T>::значение;
  template<class T>
    inline constexpr bool is_integral_v = is_integral<T>::значение;
  template<class T>
    inline constexpr bool is_floating_point_v = is_floating_point<T>::значение;
  template<class T>
    inline constexpr bool is_array_v = is_array<T>::значение;
  template<class T>
    inline constexpr bool is_pointer_v = is_pointer<T>::значение;
  template<class T>
    inline constexpr bool is_lvalue_reference_v = is_lvalue_reference<T>::значение;
  template<class T>
    inline constexpr bool is_rvalue_reference_v = is_rvalue_reference<T>::значение;
  template<class T>
    inline constexpr bool is_member_object_pointer_v = is_member_object_pointer<T>::значение;
  template<class T>
    inline constexpr bool is_member_function_pointer_v = is_member_function_pointer<T>::значение;
  template<class T>
    inline constexpr bool is_enum_v = is_enum<T>::значение;
  template<class T>
    inline constexpr bool is_union_v = is_union<T>::значение;
  template<class T>
    inline constexpr bool is_class_v = is_class<T>::значение;
  template<class T>
    inline constexpr bool is_function_v = is_function<T>::значение;
  // категории составных типов
  template<class T>
    inline constexpr bool is_reference_v = is_reference<T>::значение;
  template<class T>
    inline constexpr bool is_arithmetic_v = is_arithmetic<T>::значение;
  template<class T>
    inline constexpr bool is_fundamental_v = is_fundamental<T>::значение;
  template<class T>
    inline constexpr bool is_object_v = is_object<T>::значение;
  template<class T>
    inline constexpr bool is_scalar_v = is_scalar<T>::значение;
  template<class T>
    inline constexpr bool is_compound_v = is_compound<T>::значение;
  template<class T>
    inline constexpr bool is_member_pointer_v = is_member_pointer<T>::значение;
  // свойства типов
  template<class T>
    inline constexpr bool is_const_v = is_const<T>::значение;
  template<class T>
    inline constexpr bool is_volatile_v = is_volatile<T>::значение;
  template<class T>
    inline constexpr bool is_trivial_v = is_trivial<T>::значение;
  template<class T>
    inline constexpr bool is_trivially_copyable_v = is_trivially_copyable<T>::значение;
  template<class T>
    inline constexpr bool is_standard_layout_v = is_standard_layout<T>::значение;
  template<class T>
    inline constexpr bool is_empty_v = is_empty<T>::значение;
  template<class T>
    inline constexpr bool is_polymorphic_v = is_polymorphic<T>::значение;
  template<class T>
    inline constexpr bool is_abstract_v = is_abstract<T>::значение;
  template<class T>
    inline constexpr bool is_final_v = is_final<T>::значение;
  template<class T>
    inline constexpr bool is_aggregate_v = is_aggregate<T>::значение;
  template<class T>
    inline constexpr bool is_signed_v = is_signed<T>::значение;
  template<class T>
    inline constexpr bool is_unsigned_v = is_unsigned<T>::значение;
  template<class T>
    inline constexpr bool is_bounded_array_v = is_bounded_array<T>::значение;
  template<class T>
    inline constexpr bool is_unbounded_array_v = is_unbounded_array<T>::значение;
  template<class T>
    inline constexpr bool is_scoped_enum_v = is_scoped_enum<T>::значение;
  template<class T, class... Args>
    inline constexpr bool is_constructible_v = is_constructible<T, Args...>::значение;
  template<class T>
    inline constexpr bool is_default_constructible_v = is_default_constructible<T>::значение;
  template<class T>
    inline constexpr bool is_copy_constructible_v = is_copy_constructible<T>::значение;
  template<class T>
    inline constexpr bool is_move_constructible_v = is_move_constructible<T>::значение;
  template<class T, class U>
    inline constexpr bool is_assignable_v = is_assignable<T, U>::значение;
  template<class T>
    inline constexpr bool is_copy_assignable_v = is_copy_assignable<T>::значение;
  template<class T>
    inline constexpr bool is_move_assignable_v = is_move_assignable<T>::значение;
  template<class T, class U>
    inline constexpr bool is_swappable_with_v = is_swappable_with<T, U>::значение;
  template<class T>
    inline constexpr bool is_swappable_v = is_swappable<T>::значение;
  template<class T>
    inline constexpr bool is_destructible_v = is_destructible<T>::значение;
  template<class T, class... Args>
    inline constexpr bool is_trivially_constructible_v
      = is_trivially_constructible<T, Args...>::значение;
  template<class T>
    inline constexpr bool is_trivially_default_constructible_v
      = is_trivially_default_constructible<T>::значение;
  template<class T>
    inline constexpr bool is_trivially_copy_constructible_v
      = is_trivially_copy_constructible<T>::значение;
  template<class T>
    inline constexpr bool is_trivially_move_constructible_v
      = is_trivially_move_constructible<T>::значение;
  template<class T, class U>
    inline constexpr bool is_trivially_assignable_v = is_trivially_assignable<T, U>::значение;
  template<class T>
    inline constexpr bool is_trivially_copy_assignable_v
      = is_trivially_copy_assignable<T>::значение;
  template<class T>
    inline constexpr bool is_trivially_move_assignable_v
      = is_trivially_move_assignable<T>::значение;
  template<class T>
    inline constexpr bool is_trivially_destructible_v = is_trivially_destructible<T>::значение;
  template<class T, class... Args>
    inline constexpr bool is_nothrow_constructible_v
      = is_nothrow_constructible<T, Args...>::значение;
  template<class T>
    inline constexpr bool is_nothrow_default_constructible_v
      = is_nothrow_default_constructible<T>::значение;
  template<class T>
    inline constexpr bool is_nothrow_copy_constructible_v
      = is_nothrow_copy_constructible<T>::значение;
  template<class T>
    inline constexpr bool is_nothrow_move_constructible_v
      = is_nothrow_move_constructible<T>::значение;
  template<class T, class U>
    inline constexpr bool is_nothrow_assignable_v = is_nothrow_assignable<T, U>::значение;
  template<class T>
    inline constexpr bool is_nothrow_copy_assignable_v = is_nothrow_copy_assignable<T>::значение;
  template<class T>
    inline constexpr bool is_nothrow_move_assignable_v = is_nothrow_move_assignable<T>::значение;
  template<class T, class U>
    inline constexpr bool is_nothrow_swappable_with_v = is_nothrow_swappable_with<T, U>::значение;
  template<class T>
    inline constexpr bool is_nothrow_swappable_v = is_nothrow_swappable<T>::значение;
  template<class T>
    inline constexpr bool is_nothrow_destructible_v = is_nothrow_destructible<T>::значение;
  template<class T>
    inline constexpr bool has_virtual_destructor_v = has_virtual_destructor<T>::значение;
  template<class T>
    inline constexpr bool has_unique_object_representations_v
      = has_unique_object_representations<T>::значение;
  template<class T, class U>
    inline constexpr bool reference_constructs_from_temporary_v
      = reference_constructs_from_temporary<T, U>::значение;
  template<class T, class U>
    inline constexpr bool reference_converts_from_temporary_v
      = reference_converts_from_temporary<T, U>::значение;
  // запросы свойств типов
  template<class T>
    inline constexpr size_t alignment_of_v = alignment_of<T>::значение;
  template<class T>
    inline constexpr size_t rank_v = rank<T>::значение;
  template<class T, unsigned I = 0>
    inline constexpr size_t extent_v = extent<T, I>::значение;
  // отношения типов
  template<class T, class U>
    inline constexpr bool is_same_v = is_same<T, U>::значение;
  template<class Base, class Derived>
    inline constexpr bool is_base_of_v = is_base_of<Base, Derived>::значение;
  template<class Base, class Derived>
    inline constexpr bool is_virtual_base_of_v = is_virtual_base_of<Base, Derived>::значение;
  template<class From, class To>
    inline constexpr bool is_convertible_v = is_convertible<From, To>::значение;
  template<class From, class To>
    inline constexpr bool is_nothrow_convertible_v = is_nothrow_convertible<From, To>::значение;
  template<class T, class U>
    inline constexpr bool is_layout_compatible_v = is_layout_compatible<T, U>::значение;
  template<class Base, class Derived>
    inline constexpr bool is_pointer_interconvertible_base_of_v
      = is_pointer_interconvertible_base_of<Base, Derived>::значение;
  template<class Fn, class... ArgTypes>
    inline constexpr bool is_invocable_v = is_invocable<Fn, ArgTypes...>::значение;
  template<class R, class Fn, class... ArgTypes>
    inline constexpr bool is_invocable_r_v = is_invocable_r<R, Fn, ArgTypes...>::значение;
  template<class Fn, class... ArgTypes>
    inline constexpr bool is_nothrow_invocable_v = is_nothrow_invocable<Fn, ArgTypes...>::значение;
  template<class R, class Fn, class... ArgTypes>
    inline constexpr bool is_nothrow_invocable_r_v
      = is_nothrow_invocable_r<R, Fn, ArgTypes...>::значение;
  // характеристики логических операторов
  template<class... B>
    inline constexpr bool conjunction_v = conjunction<B...>::значение;
  template<class... B>
    inline constexpr bool disjunction_v = disjunction<B...>::значение;
  template<class B>
    inline constexpr bool negation_v = negation<B>::значение;
  // отношения между членами
  template<class S, class M>
    constexpr bool is_pointer_interconvertible_with_class(M S::*m) noexcept;
  template<class S1, class S2, class M1, class M2>
    constexpr bool is_corresponding_member(M1 S1::*m1, M2 S2::*m2) noexcept;
  // контекст константного вычисления
  constexpr bool is_constant_evaluated() noexcept;
  consteval bool is_within_lifetime(const auto*) noexcept;
}

Шаблон класса std::integral_constant

namespace std {
  template <class T, T v>
  struct integral_constant {
    static constexpr T value = v;
    using value_type = T;
    using type = integral_constant<T, v>;
    constexpr operator value_type() const noexcept { return value; }
    constexpr value_type operator()() const noexcept { return value; }
  };
}