Заголовочный файл стандартной библиотеки <type_traits>
Материал из cppreference.com
Этот заголовочный файл является частью библиотеки поддержки типов.
Классы | |
Вспомогательные классы | |
(C++11)(C++17) | константа времени компиляции указанного типа с указанным значением (шаблон класса) |
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++20) | проверяет, является ли тип типом данных с простой структурой (POD) (шаблон класса) |
(C++11)(устарело в C++17)(удалено в C++20) | проверяет, является ли тип литеральным (шаблон класса) |
проверяет, влияет ли каждый бит в представлении объекта типа на его значение (шаблон класса) | |
(C++11) | проверяет, является ли тип классовым типом (но не объединением) и не имеет нестатических элементов данных (шаблон класса) |
(C++11) | проверяет, является ли тип типом полиморфного класса (шаблон класса) |
(C++11) | проверяет, является ли тип типом абстрактного класса (шаблон класса) |
(C++14) | проверяет, является ли тип окончательным классовым типом (шаблон класса) |
(C++17) | проверяет, является ли тип агрегатным типом (шаблон класса) |
(C++23) | проверяет, является ли тип типом с неявным временем жизни (шаблон класса) |
(C++11) | проверяет, является ли тип арифметическим типом со знаком (шаблон класса) |
(C++11) | проверяет, является ли тип беззнаковым арифметическим типом (шаблон класса) |
(C++20) | проверяет, является ли тип типом массива с известной границей (шаблон класса) |
(C++20) | проверяет, является ли тип типом массива с неизвестной границей (шаблон класса) |
(C++23) | проверяет, является ли тип типом перечисления с ограниченной областью видимости (шаблон класса) |
Поддерживаемые операции | |
(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++17)(C++17)(C++17)(C++17) | проверяет, можно ли объекты одного типа обменять с объектами того же или другого типа (шаблон класса) |
проверяет, привязана ли ссылка к временному объекту при инициализации копированием (шаблон класса) | |
проверяет, привязана ли ссылка к временному объекту в прямой инициализации (шаблон класса) |
Запросы свойств | |
(C++11) | получает требования к выравниванию типа (шаблон класса) |
(C++11) | получает количество измерений типа, являющегося массивом (шаблон класса) |
(C++11) | получает размер типа массива по указанному измерению (шаблон класса) |
Взаимоотношения типов | |
(C++11) | проверяет, являются ли два типа одним и тем же типом (шаблон класса) |
(C++11) | проверяет, является ли тип производным от другого типа (шаблон класса) |
(C++11)(C++20) | проверяет, можно ли преобразовать тип в другой тип (шаблон класса) |
(C++20) | проверяет, являются ли два типа совместимыми по компоновке (шаблон класса) |
проверяет, является ли тип взаимопреобразуемым по указателю (изначально) базовым классом другого типа (шаблон класса) | |
проверяет, может ли тип быть вызван (как если бы std::invoke) с заданными типами аргументов (шаблон класса) | |
Квалификаторы 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++23) | определяет тип, подходящий для использования в качестве неинициализированного хранилища для типов заданного размера (шаблон класса) |
(C++11)(устарело в C++23) | определяет тип, подходящий для использования в качестве неинициализированного хранилища для всех данных типов (шаблон класса) |
(C++11) | применяет преобразования типов, как при передаче аргумента функции по значению (шаблон класса) |
(C++20) | объединяет std::remove_cv и std::remove_reference (шаблон класса) |
(C++11) | условно удаляет перегрузку функции или специализацию шаблона из разрешения перегрузки (шаблон класса) |
(C++11) | выбирает тот или иной тип на основе логического значения времени компиляции (шаблон класса) |
(C++11) | определяет общий тип группы типов (шаблон класса) |
определяет общий ссылочный тип группы типов (шаблон класса) | |
(C++11) | получает базовый целочисленный тип для данного типа перечисления (шаблон класса) |
(C++11)(удалено в C++20)(C++17) | выводит тип результата вызова вызываемого объекта с набором аргументов (шаблон класса) |
(C++17) | псевдоним шаблона с переменным числом аргументов типа void (псевдоним шаблона) |
(C++20) | возвращает аргумент тип без изменений (шаблон класса) |
Операции над свойствами | |
(C++17) | вариативная логическая метафункция И (шаблон класса) |
(C++17) | вариативная логическая метафункция ИЛИ (шаблон класса) |
(C++17) | логическая метафункция НЕ (шаблон класса) |
Функции | |
Отношения элементов | |
проверяет, являются ли объекты типа взаимопреобразуемыми по указателю с указанным подобъектом этого типа (шаблон функции) | |
(C++20) | проверяет, соответствуют ли два указанных элемента друг другу в общей начальной подпоследовательности двух указанных типов (шаблон функции) |
Константный контекст оценки | |
(C++20) | определяет, происходит ли вызов в контексте вычисления константы (функция) |
(C++26) | проверяет, находится ли указатель в пределах времени жизни объекта во время компиляции (функция) |
[править]Краткое описание
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 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; // свойства логических операторовtemplate<class... B>struct conjunction;template<class... B>struct disjunction;template<class B>struct negation; // основные категории типовtemplate<class T>inlineconstexprbool is_void_v = is_void<T>::value;template<class T>inlineconstexprbool is_null_pointer_v = is_null_pointer<T>::value;template<class T>inlineconstexprbool is_integral_v = is_integral<T>::value;template<class T>inlineconstexprbool is_floating_point_v = is_floating_point<T>::value;template<class T>inlineconstexprbool is_array_v = is_array<T>::value;template<class T>inlineconstexprbool is_pointer_v = is_pointer<T>::value;template<class T>inlineconstexprbool is_lvalue_reference_v = is_lvalue_reference<T>::value;template<class T>inlineconstexprbool is_rvalue_reference_v = is_rvalue_reference<T>::value;template<class T>inlineconstexprbool is_member_object_pointer_v = is_member_object_pointer<T>::value;template<class T>inlineconstexprbool is_member_function_pointer_v = is_member_function_pointer<T>::value;template<class T>inlineconstexprbool is_enum_v = is_enum<T>::value;template<class T>inlineconstexprbool is_union_v = is_union<T>::value;template<class T>inlineconstexprbool is_class_v = is_class<T>::value;template<class T>inlineconstexprbool is_function_v = is_function<T>::value; // категории составных типовtemplate<class T>inlineconstexprbool is_reference_v = is_reference<T>::value;template<class T>inlineconstexprbool is_arithmetic_v = is_arithmetic<T>::value;template<class T>inlineconstexprbool is_fundamental_v = is_fundamental<T>::value;template<class T>inlineconstexprbool is_object_v = is_object<T>::value;template<class T>inlineconstexprbool is_scalar_v = is_scalar<T>::value;template<class T>inlineconstexprbool is_compound_v = is_compound<T>::value;template<class T>inlineconstexprbool is_member_pointer_v = is_member_pointer<T>::value; // свойства типовtemplate<class T>inlineconstexprbool is_const_v = is_const<T>::value;template<class T>inlineconstexprbool is_volatile_v = is_volatile<T>::value;template<class T>inlineconstexprbool is_trivial_v = is_trivial<T>::value;template<class T>inlineconstexprbool is_trivially_copyable_v = is_trivially_copyable<T>::value;template<class T>inlineconstexprbool is_standard_layout_v = is_standard_layout<T>::value;template<class T>inlineconstexprbool is_empty_v = is_empty<T>::value;template<class T>inlineconstexprbool is_polymorphic_v = is_polymorphic<T>::value;template<class T>inlineconstexprbool is_abstract_v = is_abstract<T>::value;template<class T>inlineconstexprbool is_final_v = is_final<T>::value;template<class T>inlineconstexprbool is_aggregate_v = is_aggregate<T>::value;template<class T>inlineconstexprbool is_signed_v = is_signed<T>::value;template<class T>inlineconstexprbool is_unsigned_v = is_unsigned<T>::value;template<class T>inlineconstexprbool is_bounded_array_v = is_bounded_array<T>::value;template<class T>inlineconstexprbool is_unbounded_array_v = is_unbounded_array<T>::value;template<class T>inlineconstexprbool is_scoped_enum_v = is_scoped_enum<T>::value;template<class T, class... Args>inlineconstexprbool is_constructible_v = is_constructible<T, Args...>::value;template<class T>inlineconstexprbool is_default_constructible_v = is_default_constructible<T>::value;template<class T>inlineconstexprbool is_copy_constructible_v = is_copy_constructible<T>::value;template<class T>inlineconstexprbool is_move_constructible_v = is_move_constructible<T>::value;template<class T, class U>inlineconstexprbool is_assignable_v = is_assignable<T, U>::value;template<class T>inlineconstexprbool is_copy_assignable_v = is_copy_assignable<T>::value;template<class T>inlineconstexprbool is_move_assignable_v = is_move_assignable<T>::value;template<class T, class U>inlineconstexprbool is_swappable_with_v = is_swappable_with<T, U>::value;template<class T>inlineconstexprbool is_swappable_v = is_swappable<T>::value;template<class T>inlineconstexprbool is_destructible_v = is_destructible<T>::value;template<class T, class... Args>inlineconstexprbool is_trivially_constructible_v = is_trivially_constructible<T, Args...>::value;template<class T>inlineconstexprbool is_trivially_default_constructible_v = is_trivially_default_constructible<T>::value;template<class T>inlineconstexprbool is_trivially_copy_constructible_v = is_trivially_copy_constructible<T>::value;template<class T>inlineconstexprbool is_trivially_move_constructible_v = is_trivially_move_constructible<T>::value;template<class T, class U>inlineconstexprbool is_trivially_assignable_v = is_trivially_assignable<T, U>::value;template<class T>inlineconstexprbool is_trivially_copy_assignable_v = is_trivially_copy_assignable<T>::value;template<class T>inlineconstexprbool is_trivially_move_assignable_v = is_trivially_move_assignable<T>::value;template<class T>inlineconstexprbool is_trivially_destructible_v = is_trivially_destructible<T>::value;template<class T, class... Args>inlineconstexprbool is_nothrow_constructible_v = is_nothrow_constructible<T, Args...>::value;template<class T>inlineconstexprbool is_nothrow_default_constructible_v = is_nothrow_default_constructible<T>::value;template<class T>inlineconstexprbool is_nothrow_copy_constructible_v = is_nothrow_copy_constructible<T>::value;template<class T>inlineconstexprbool is_nothrow_move_constructible_v = is_nothrow_move_constructible<T>::value;template<class T, class U>inlineconstexprbool is_nothrow_assignable_v = is_nothrow_assignable<T, U>::value;template<class T>inlineconstexprbool is_nothrow_copy_assignable_v = is_nothrow_copy_assignable<T>::value;template<class T>inlineconstexprbool is_nothrow_move_assignable_v = is_nothrow_move_assignable<T>::value;template<class T, class U>inlineconstexprbool is_nothrow_swappable_with_v = is_nothrow_swappable_with<T, U>::value;template<class T>inlineconstexprbool is_nothrow_swappable_v = is_nothrow_swappable<T>::value;template<class T>inlineconstexprbool is_nothrow_destructible_v = is_nothrow_destructible<T>::value;template<class T>inlineconstexprbool has_virtual_destructor_v = has_virtual_destructor<T>::value;template<class T>inlineconstexprbool has_unique_object_representations_v = has_unique_object_representations<T>::value;template<class T, class U>inlineconstexprbool reference_constructs_from_temporary_v = reference_constructs_from_temporary<T, U>::value;template<class T, class U>inlineconstexprbool reference_converts_from_temporary_v = reference_converts_from_temporary<T, U>::value; // запросы свойств типовtemplate<class T>inlineconstexpr size_t alignment_of_v = alignment_of<T>::value;template<class T>inlineconstexpr size_t rank_v = rank<T>::value;template<class T, unsigned I =0>inlineconstexpr size_t extent_v = extent<T, I>::value; // отношения типовtemplate<class T, class U>inlineconstexprbool is_same_v = is_same<T, U>::value;template<class Base, class Derived>inlineconstexprbool is_base_of_v = is_base_of<Base, Derived>::value;template<class From, class To>inlineconstexprbool is_convertible_v = is_convertible<From, To>::value;template<class From, class To>inlineconstexprbool is_nothrow_convertible_v = is_nothrow_convertible<From, To>::value;template<class T, class U>inlineconstexprbool is_layout_compatible_v = is_layout_compatible<T, U>::value;template<class Base, class Derived>inlineconstexprbool is_pointer_interconvertible_base_of_v = is_pointer_interconvertible_base_of<Base, Derived>::value;template<class Fn, class... ArgTypes>inlineconstexprbool is_invocable_v = is_invocable<Fn, ArgTypes...>::value;template<class R, class Fn, class... ArgTypes>inlineconstexprbool is_invocable_r_v = is_invocable_r<R, Fn, ArgTypes...>::value;template<class Fn, class... ArgTypes>inlineconstexprbool is_nothrow_invocable_v = is_nothrow_invocable<Fn, ArgTypes...>::value;template<class R, class Fn, class... ArgTypes>inlineconstexprbool is_nothrow_invocable_r_v = is_nothrow_invocable_r<R, Fn, ArgTypes...>::value; // свойства логических операторовtemplate<class... B>inlineconstexprbool conjunction_v = conjunction<B...>::value;template<class... B>inlineconstexprbool disjunction_v = disjunction<B...>::value;template<class B>inlineconstexprbool negation_v = negation<B>::value; // отношения элементовtemplate<class S, class M>constexprbool is_pointer_interconvertible_with_class(M S::*m)noexcept;template<class S1, class S2, class M1, class M2>constexprbool is_corresponding_member(M1 S1::*m1, M2 S2::*m2)noexcept; // контекст константной оценкиconstexprbool is_constant_evaluated()noexcept; consteval bool is_within_lifetime(constauto*)noexcept;}
[править]Шаблон класса std::integral_constant
namespace std {template<class T, T v>struct integral_constant {staticconstexpr T value = v;using value_type = T;using type = integral_constant<T, v>;constexpr operator value_type()constnoexcept{return value;}constexpr value_type operator()()constnoexcept{return value;}};}