[meta.type.synop]

# 21 Metaprogramming library [[meta]](./#meta)

## 21.3 Metaprogramming and type traits [[type.traits]](type.traits#meta.type.synop)

### 21.3.3 Header <type_traits> synopsis [meta.type.synop]

// all freestandingnamespace std {// [[meta.help]](meta.help "21.3.4 Helper classes"), helper classtemplate<class T, T v> struct integral_constant; template<bool B>using [bool_constant](meta.help#lib:bool_constant "21.3.4 Helper classes [meta.help]") = integral_constant<bool, B>; using [true_type](meta.help#lib:true_type "21.3.4 Helper classes [meta.help]") = bool_constant<true>; using [false_type](meta.help#lib:false_type "21.3.4 Helper classes [meta.help]") = bool_constant<false>; // [[const.wrap.class]](const.wrap.class "21.3.5 Class template constant_­wrapper"), class template constant_wrappertemplate<class T>struct *cw-fixed-value*; // *exposition only*template<*cw-fixed-value* X, class = typename decltype(*cw-fixed-value*(X))::*type*>struct constant_wrapper; template<class T>concept [*constexpr-param*](#concept:constexpr-param "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = // *exposition only*requires { typename constant_wrapper<T::value>; }; struct *cw-operators*; // *exposition only*template<*cw-fixed-value* X>constexpr auto [cw](#lib:cw "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = constant_wrapper<X>{}; // [[meta.unary.cat]](meta.unary.cat "21.3.6.2 Primary type categories"), primary type categoriestemplate<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_reflection; // [[meta.unary.comp]](meta.unary.comp "21.3.6.3 Composite type traits"), composite type categoriestemplate<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; // [[meta.unary.prop]](meta.unary.prop "21.3.6.4 Type properties"), type propertiestemplate<class T> struct is_const; template<class T> struct is_volatile; template<class T> struct is_trivially_copyable; template<class T> struct is_trivially_relocatable; template<class T> struct is_replaceable; 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_consteval_only; 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 is_nothrow_relocatable; template<class T> struct is_implicit_lifetime; 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; // [[meta.unary.prop.query]](meta.unary.prop.query "21.3.7 Type property queries"), type property queriestemplate<class T> struct alignment_of; template<class T> struct rank; template<class T, unsigned I = 0> struct extent; // [[meta.rel]](meta.rel "21.3.8 Relationships between types"), type relationstemplate<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; template<class Fn, class Tuple> struct is_applicable; template<class Fn, class Tuple> struct is_nothrow_applicable; // [[meta.trans.cv]](meta.trans.cv "21.3.9.2 Const-volatile modifications"), const-volatile modificationstemplate<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](#lib:remove_const_t "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = typename [remove_const](meta.reflection.traits#lib:remove_const "21.4.17 Reflection type traits [meta.reflection.traits]")<T>::type; template<class T>using [remove_volatile_t](#lib:remove_volatile_t "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = typename [remove_volatile](meta.reflection.traits#lib:remove_volatile "21.4.17 Reflection type traits [meta.reflection.traits]")<T>::type; template<class T>using [remove_cv_t](#lib:remove_cv_t "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = typename [remove_cv](meta.reflection.traits#lib:remove_cv "21.4.17 Reflection type traits [meta.reflection.traits]")<T>::type; template<class T>using [add_const_t](#lib:add_const_t "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = typename [add_const](meta.reflection.traits#lib:add_const "21.4.17 Reflection type traits [meta.reflection.traits]")<T>::type; template<class T>using [add_volatile_t](#lib:add_volatile_t "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = typename [add_volatile](meta.reflection.traits#lib:add_volatile "21.4.17 Reflection type traits [meta.reflection.traits]")<T>::type; template<class T>using [add_cv_t](#lib:add_cv_t "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = typename [add_cv](meta.reflection.traits#lib:add_cv "21.4.17 Reflection type traits [meta.reflection.traits]")<T>::type; // [[meta.trans.ref]](meta.trans.ref "21.3.9.3 Reference modifications"), reference modificationstemplate<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](#lib:remove_reference_t "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = typename [remove_reference](meta.reflection.traits#lib:remove_reference "21.4.17 Reflection type traits [meta.reflection.traits]")<T>::type; template<class T>using [add_lvalue_reference_t](#lib:add_lvalue_reference_t "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = typename [add_lvalue_reference](meta.reflection.traits#lib:add_lvalue_reference "21.4.17 Reflection type traits [meta.reflection.traits]")<T>::type; template<class T>using [add_rvalue_reference_t](#lib:add_rvalue_reference_t "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = typename [add_rvalue_reference](meta.reflection.traits#lib:add_rvalue_reference "21.4.17 Reflection type traits [meta.reflection.traits]")<T>::type; // [[meta.trans.sign]](meta.trans.sign "21.3.9.4 Sign modifications"), sign modificationstemplate<class T> struct make_signed; template<class T> struct make_unsigned; template<class T>using [make_signed_t](#lib:make_signed_t "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = typename [make_signed](meta.reflection.traits#lib:make_signed "21.4.17 Reflection type traits [meta.reflection.traits]")<T>::type; template<class T>using [make_unsigned_t](#lib:make_unsigned_t "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = typename [make_unsigned](meta.reflection.traits#lib:make_unsigned "21.4.17 Reflection type traits [meta.reflection.traits]")<T>::type; // [[meta.trans.arr]](meta.trans.arr "21.3.9.5 Array modifications"), array modificationstemplate<class T> struct remove_extent; template<class T> struct remove_all_extents; template<class T>using [remove_extent_t](#lib:remove_extent_t "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = typename [remove_extent](meta.reflection.traits#lib:remove_extent "21.4.17 Reflection type traits [meta.reflection.traits]")<T>::type; template<class T>using [remove_all_extents_t](#lib:remove_all_extents_t "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = typename [remove_all_extents](meta.reflection.traits#lib:remove_all_extents "21.4.17 Reflection type traits [meta.reflection.traits]")<T>::type; // [[meta.trans.ptr]](meta.trans.ptr "21.3.9.6 Pointer modifications"), pointer modificationstemplate<class T> struct remove_pointer; template<class T> struct add_pointer; template<class T>using [remove_pointer_t](#lib:remove_pointer_t "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = typename [remove_pointer](meta.reflection.traits#lib:remove_pointer "21.4.17 Reflection type traits [meta.reflection.traits]")<T>::type; template<class T>using [add_pointer_t](#lib:add_pointer_t "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = typename [add_pointer](meta.reflection.traits#lib:add_pointer "21.4.17 Reflection type traits [meta.reflection.traits]")<T>::type; // [[meta.trans.other]](meta.trans.other "21.3.9.7 Other transformations"), other transformationstemplate<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 Fn, class Tuple> struct apply_result; template<class T> struct unwrap_reference; template<class T> struct unwrap_ref_decay; template<class T>using [type_identity_t](#lib:type_identity_t "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = typename [type_identity](meta.trans.other#lib:type_identity "21.3.9.7 Other transformations [meta.trans.other]")<T>::type; template<class T>using [remove_cvref_t](#lib:remove_cvref_t "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = typename [remove_cvref](meta.reflection.traits#lib:remove_cvref "21.4.17 Reflection type traits [meta.reflection.traits]")<T>::type; template<class T>using [decay_t](#lib:decay_t "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = typename [decay](meta.reflection.traits#lib:decay "21.4.17 Reflection type traits [meta.reflection.traits]")<T>::type; template<bool B, class T = void>using [enable_if_t](#lib:enable_if_t "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = typename [enable_if](meta.trans.other#lib:enable_if "21.3.9.7 Other transformations [meta.trans.other]")<B, T>::type; template<bool B, class T, class F>using [conditional_t](#lib:conditional_t "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = typename [conditional](meta.trans.other#lib:conditional "21.3.9.7 Other transformations [meta.trans.other]")<B, T, F>::type; template<class... T>using [common_type_t](#lib:common_type_t "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = typename [common_type](time.traits.specializations#lib:common_type "30.4.3 Specializations of common_­type [time.traits.specializations]")<T...>::type; template<class... T>using [common_reference_t](#lib:common_reference_t "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = typename [common_reference](meta.reflection.traits#lib:common_reference "21.4.17 Reflection type traits [meta.reflection.traits]")<T...>::type; template<class T>using [underlying_type_t](#lib:underlying_type_t "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = typename [underlying_type](meta.reflection.traits#lib:underlying_type "21.4.17 Reflection type traits [meta.reflection.traits]")<T>::type; template<class Fn, class... ArgTypes>using [invoke_result_t](#lib:invoke_result_t "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = typename [invoke_result](meta.reflection.traits#lib:invoke_result "21.4.17 Reflection type traits [meta.reflection.traits]")<Fn, ArgTypes...>::type; template<class Fn, class Tuple>using [apply_result_t](#lib:apply_result_t "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = typename [apply_result](meta.trans.other#lib:apply_result "21.3.9.7 Other transformations [meta.trans.other]")<Fn, Tuple>::type; template<class T>using [unwrap_reference_t](#lib:unwrap_reference_t "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = typename [unwrap_reference](meta.reflection.traits#lib:unwrap_reference "21.4.17 Reflection type traits [meta.reflection.traits]")<T>::type; template<class T>using [unwrap_ref_decay_t](functional.syn#lib:unwrap_ref_decay_t "22.10.2 Header <functional> synopsis [functional.syn]") = typename [unwrap_ref_decay](functional.syn#lib:unwrap_ref_decay "22.10.2 Header <functional> synopsis [functional.syn]")<T>::type; template<class...>using [void_t](#lib:void_t "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = void; // [[meta.logical]](meta.logical "21.3.10 Logical operator traits"), logical operator traitstemplate<class... B> struct conjunction; template<class... B> struct disjunction; template<class B> struct negation; // [[meta.unary.cat]](meta.unary.cat "21.3.6.2 Primary type categories"), primary type categoriestemplate<class T>constexpr bool [is_void_v](#lib:is_void_v "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = [is_void](meta.unary.cat#lib:is_void "21.3.6.2 Primary type categories [meta.unary.cat]")<T>::value; template<class T>constexpr bool [is_null_pointer_v](#lib:is_null_pointer_v "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = [is_null_pointer](meta.unary.cat#lib:is_null_pointer "21.3.6.2 Primary type categories [meta.unary.cat]")<T>::value; template<class T>constexpr bool [is_integral_v](#lib:is_integral_v "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = [is_integral](meta.unary.cat#lib:is_integral "21.3.6.2 Primary type categories [meta.unary.cat]")<T>::value; template<class T>constexpr bool [is_floating_point_v](#lib:is_floating_point_v "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = [is_floating_point](meta.unary.cat#lib:is_floating_point "21.3.6.2 Primary type categories [meta.unary.cat]")<T>::value; template<class T>constexpr bool [is_array_v](#lib:is_array_v "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = [is_array](meta.unary.cat#lib:is_array "21.3.6.2 Primary type categories [meta.unary.cat]")<T>::value; template<class T>constexpr bool [is_pointer_v](#lib:is_pointer_v "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = [is_pointer](meta.unary.cat#lib:is_pointer "21.3.6.2 Primary type categories [meta.unary.cat]")<T>::value; template<class T>constexpr bool [is_lvalue_reference_v](#lib:is_lvalue_reference_v "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = [is_lvalue_reference](meta.unary.cat#lib:is_lvalue_reference "21.3.6.2 Primary type categories [meta.unary.cat]")<T>::value; template<class T>constexpr bool [is_rvalue_reference_v](#lib:is_rvalue_reference_v "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = [is_rvalue_reference](meta.unary.cat#lib:is_rvalue_reference "21.3.6.2 Primary type categories [meta.unary.cat]")<T>::value; template<class T>constexpr bool [is_member_object_pointer_v](#lib:is_member_object_pointer_v "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = [is_member_object_pointer](meta.unary.cat#lib:is_member_object_pointer "21.3.6.2 Primary type categories [meta.unary.cat]")<T>::value; template<class T>constexpr bool [is_member_function_pointer_v](#lib:is_member_function_pointer_v "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = [is_member_function_pointer](meta.unary.cat#lib:is_member_function_pointer "21.3.6.2 Primary type categories [meta.unary.cat]")<T>::value; template<class T>constexpr bool [is_enum_v](#lib:is_enum_v "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = [is_enum](meta.unary.cat#lib:is_enum "21.3.6.2 Primary type categories [meta.unary.cat]")<T>::value; template<class T>constexpr bool [is_union_v](#lib:is_union_v "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = [is_union](meta.unary.cat#lib:is_union "21.3.6.2 Primary type categories [meta.unary.cat]")<T>::value; template<class T>constexpr bool [is_class_v](#lib:is_class_v "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = [is_class](meta.unary.cat#lib:is_class "21.3.6.2 Primary type categories [meta.unary.cat]")<T>::value; template<class T>constexpr bool [is_function_v](#lib:is_function_v "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = [is_function](meta.reflection.queries#lib:is_function "21.4.7 Reflection queries [meta.reflection.queries]")<T>::value; template<class T>constexpr bool [is_reflection_v](#lib:is_reflection_v "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = [is_reflection](meta.unary.cat#lib:is_reflection "21.3.6.2 Primary type categories [meta.unary.cat]")<T>::value; // [[meta.unary.comp]](meta.unary.comp "21.3.6.3 Composite type traits"), composite type categoriestemplate<class T>constexpr bool [is_reference_v](#lib:is_reference_v "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = [is_reference](meta.unary.comp#lib:is_reference "21.3.6.3 Composite type traits [meta.unary.comp]")<T>::value; template<class T>constexpr bool [is_arithmetic_v](#lib:is_arithmetic_v "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = [is_arithmetic](meta.unary.comp#lib:is_arithmetic "21.3.6.3 Composite type traits [meta.unary.comp]")<T>::value; template<class T>constexpr bool [is_fundamental_v](#lib:is_fundamental_v "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = [is_fundamental](meta.unary.comp#lib:is_fundamental "21.3.6.3 Composite type traits [meta.unary.comp]")<T>::value; template<class T>constexpr bool [is_object_v](#lib:is_object_v "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = [is_object](meta.reflection.queries#lib:is_object "21.4.7 Reflection queries [meta.reflection.queries]")<T>::value; template<class T>constexpr bool [is_scalar_v](#lib:is_scalar_v "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = [is_scalar](meta.unary.comp#lib:is_scalar "21.3.6.3 Composite type traits [meta.unary.comp]")<T>::value; template<class T>constexpr bool [is_compound_v](#lib:is_compound_v "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = [is_compound](meta.unary.comp#lib:is_compound "21.3.6.3 Composite type traits [meta.unary.comp]")<T>::value; template<class T>constexpr bool [is_member_pointer_v](#lib:is_member_pointer_v "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = [is_member_pointer](meta.unary.comp#lib:is_member_pointer "21.3.6.3 Composite type traits [meta.unary.comp]")<T>::value; // [[meta.unary.prop]](meta.unary.prop "21.3.6.4 Type properties"), type propertiestemplate<class T>constexpr bool [is_const_v](#lib:is_const_v "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = [is_const](meta.reflection.queries#lib:is_const "21.4.7 Reflection queries [meta.reflection.queries]")<T>::value; template<class T>constexpr bool [is_volatile_v](#lib:is_volatile_v "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = [is_volatile](meta.reflection.queries#lib:is_volatile "21.4.7 Reflection queries [meta.reflection.queries]")<T>::value; template<class T>constexpr bool [is_trivially_copyable_v](#lib:is_trivially_copyable_v "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = [is_trivially_copyable](meta.unary.prop#lib:is_trivially_copyable "21.3.6.4 Type properties [meta.unary.prop]")<T>::value; template<class T>constexpr bool [is_trivially_relocatable_v](#lib:is_trivially_relocatable_v "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = [is_trivially_relocatable](meta.unary.prop#lib:is_trivially_relocatable "21.3.6.4 Type properties [meta.unary.prop]")<T>::value; template<class T>constexpr bool [is_standard_layout_v](#lib:is_standard_layout_v "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = [is_standard_layout](meta.unary.prop#lib:is_standard_layout "21.3.6.4 Type properties [meta.unary.prop]")<T>::value; template<class T>constexpr bool [is_empty_v](#lib:is_empty_v "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = is_empty<T>::value; template<class T>constexpr bool [is_polymorphic_v](#lib:is_polymorphic_v "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = [is_polymorphic](meta.unary.prop#lib:is_polymorphic "21.3.6.4 Type properties [meta.unary.prop]")<T>::value; template<class T>constexpr bool [is_abstract_v](#lib:is_abstract_v "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = [is_abstract](meta.unary.prop#lib:is_abstract "21.3.6.4 Type properties [meta.unary.prop]")<T>::value; template<class T>constexpr bool [is_final_v](#lib:is_final_v "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = [is_final](meta.reflection.queries#lib:is_final "21.4.7 Reflection queries [meta.reflection.queries]")<T>::value; template<class T>constexpr bool [is_aggregate_v](#lib:is_aggregate_v "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = [is_aggregate](meta.unary.prop#lib:is_aggregate "21.3.6.4 Type properties [meta.unary.prop]")<T>::value; template<class T>constexpr bool [is_consteval_only_v](#lib:is_consteval_only_v "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = [is_consteval_only](meta.unary.prop#lib:is_consteval_only "21.3.6.4 Type properties [meta.unary.prop]")<T>::value; template<class T>constexpr bool [is_signed_v](#lib:is_signed_v "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = is_signed<T>::value; template<class T>constexpr bool [is_unsigned_v](#lib:is_unsigned_v "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = [is_unsigned](meta.unary.prop#lib:is_unsigned "21.3.6.4 Type properties [meta.unary.prop]")<T>::value; template<class T>constexpr bool [is_bounded_array_v](#lib:is_bounded_array_v "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = [is_bounded_array](meta.unary.prop#lib:is_bounded_array "21.3.6.4 Type properties [meta.unary.prop]")<T>::value; template<class T>constexpr bool [is_unbounded_array_v](#lib:is_unbounded_array_v "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = [is_unbounded_array](meta.unary.prop#lib:is_unbounded_array "21.3.6.4 Type properties [meta.unary.prop]")<T>::value; template<class T>constexpr bool [is_scoped_enum_v](#lib:is_scoped_enum_v "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = [is_scoped_enum](meta.unary.prop#lib:is_scoped_enum "21.3.6.4 Type properties [meta.unary.prop]")<T>::value; template<class T, class... Args>constexpr bool [is_constructible_v](#lib:is_constructible_v "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = [is_constructible](meta.unary.prop#lib:is_constructible "21.3.6.4 Type properties [meta.unary.prop]")<T, Args...>::value; template<class T>constexpr bool [is_default_constructible_v](#lib:is_default_constructible_v "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = [is_default_constructible](meta.unary.prop#lib:is_default_constructible "21.3.6.4 Type properties [meta.unary.prop]")<T>::value; template<class T>constexpr bool [is_copy_constructible_v](#lib:is_copy_constructible_v "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = [is_copy_constructible](meta.unary.prop#lib:is_copy_constructible "21.3.6.4 Type properties [meta.unary.prop]")<T>::value; template<class T>constexpr bool [is_move_constructible_v](#lib:is_move_constructible_v "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = [is_move_constructible](meta.unary.prop#lib:is_move_constructible "21.3.6.4 Type properties [meta.unary.prop]")<T>::value; template<class T, class U>constexpr bool [is_assignable_v](#lib:is_assignable_v "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = [is_assignable](meta.unary.prop#lib:is_assignable "21.3.6.4 Type properties [meta.unary.prop]")<T, U>::value; template<class T>constexpr bool [is_copy_assignable_v](#lib:is_copy_assignable_v "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = [is_copy_assignable](meta.unary.prop#lib:is_copy_assignable "21.3.6.4 Type properties [meta.unary.prop]")<T>::value; template<class T>constexpr bool [is_move_assignable_v](#lib:is_move_assignable_v "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = [is_move_assignable](meta.unary.prop#lib:is_move_assignable "21.3.6.4 Type properties [meta.unary.prop]")<T>::value; template<class T, class U>constexpr bool [is_swappable_with_v](#lib:is_swappable_with_v "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = [is_swappable_with](meta.unary.prop#lib:is_swappable_with "21.3.6.4 Type properties [meta.unary.prop]")<T, U>::value; template<class T>constexpr bool [is_swappable_v](#lib:is_swappable_v "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = [is_swappable](meta.unary.prop#lib:is_swappable "21.3.6.4 Type properties [meta.unary.prop]")<T>::value; template<class T>constexpr bool [is_destructible_v](#lib:is_destructible_v "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = [is_destructible](meta.unary.prop#lib:is_destructible "21.3.6.4 Type properties [meta.unary.prop]")<T>::value; template<class T, class... Args>constexpr bool is_trivially_constructible_v = is_trivially_constructible<T, Args...>::value; template<class T>constexpr bool [is_trivially_default_constructible_v](#lib:is_trivially_default_constructible_v "21.3.3 Header <type_­traits> synopsis [meta.type.synop]")= [is_trivially_default_constructible](meta.unary.prop#lib:is_trivially_default_constructible "21.3.6.4 Type properties [meta.unary.prop]")<T>::value; template<class T>constexpr bool is_trivially_copy_constructible_v = is_trivially_copy_constructible<T>::value; template<class T>constexpr bool is_trivially_move_constructible_v = is_trivially_move_constructible<T>::value; template<class T, class U>constexpr bool [is_trivially_assignable_v](#lib:is_trivially_assignable_v "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = [is_trivially_assignable](meta.unary.prop#lib:is_trivially_assignable "21.3.6.4 Type properties [meta.unary.prop]")<T, U>::value; template<class T>constexpr bool is_trivially_copy_assignable_v = is_trivially_copy_assignable<T>::value; template<class T>constexpr bool is_trivially_move_assignable_v = is_trivially_move_assignable<T>::value; template<class T>constexpr bool [is_trivially_destructible_v](#lib:is_trivially_destructible_v "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = [is_trivially_destructible](meta.unary.prop#lib:is_trivially_destructible "21.3.6.4 Type properties [meta.unary.prop]")<T>::value; template<class T, class... Args>constexpr bool is_nothrow_constructible_v = is_nothrow_constructible<T, Args...>::value; template<class T>constexpr bool [is_nothrow_default_constructible_v](#lib:is_nothrow_default_constructible_v "21.3.3 Header <type_­traits> synopsis [meta.type.synop]")= [is_nothrow_default_constructible](meta.unary.prop#lib:is_nothrow_default_constructible "21.3.6.4 Type properties [meta.unary.prop]")<T>::value; template<class T>constexpr bool is_nothrow_copy_constructible_v = is_nothrow_copy_constructible<T>::value; template<class T>constexpr bool is_nothrow_move_constructible_v = is_nothrow_move_constructible<T>::value; template<class T, class U>constexpr bool [is_nothrow_assignable_v](#lib:is_nothrow_assignable_v "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = [is_nothrow_assignable](meta.unary.prop#lib:is_nothrow_assignable "21.3.6.4 Type properties [meta.unary.prop]")<T, U>::value; template<class T>constexpr bool [is_nothrow_copy_assignable_v](#lib:is_nothrow_copy_assignable_v "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = [is_nothrow_copy_assignable](meta.unary.prop#lib:is_nothrow_copy_assignable "21.3.6.4 Type properties [meta.unary.prop]")<T>::value; template<class T>constexpr bool [is_nothrow_move_assignable_v](#lib:is_nothrow_move_assignable_v "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = [is_nothrow_move_assignable](meta.unary.prop#lib:is_nothrow_move_assignable "21.3.6.4 Type properties [meta.unary.prop]")<T>::value; template<class T, class U>constexpr bool [is_nothrow_swappable_with_v](#lib:is_nothrow_swappable_with_v "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = [is_nothrow_swappable_with](meta.unary.prop#lib:is_nothrow_swappable_with "21.3.6.4 Type properties [meta.unary.prop]")<T, U>::value; template<class T>constexpr bool [is_nothrow_swappable_v](#lib:is_nothrow_swappable_v "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = [is_nothrow_swappable](meta.unary.prop#lib:is_nothrow_swappable "21.3.6.4 Type properties [meta.unary.prop]")<T>::value; template<class T>constexpr bool [is_nothrow_destructible_v](#lib:is_nothrow_destructible_v "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = [is_nothrow_destructible](meta.unary.prop#lib:is_nothrow_destructible "21.3.6.4 Type properties [meta.unary.prop]")<T>::value; template<class T>constexpr bool [is_nothrow_relocatable_v](#lib:is_nothrow_relocatable_v "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = [is_nothrow_relocatable](meta.unary.prop#lib:is_nothrow_relocatable "21.3.6.4 Type properties [meta.unary.prop]")<T>::value; template<class T>constexpr bool [is_implicit_lifetime_v](#lib:is_implicit_lifetime_v "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = [is_implicit_lifetime](meta.unary.prop#lib:is_implicit_lifetime "21.3.6.4 Type properties [meta.unary.prop]")<T>::value; template<class T>constexpr bool [is_replaceable_v](#lib:is_replaceable_v "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = [is_replaceable](meta.unary.prop#lib:is_replaceable "21.3.6.4 Type properties [meta.unary.prop]")<T>::value; template<class T>constexpr bool [has_virtual_destructor_v](#lib:has_virtual_destructor_v "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = [has_virtual_destructor](meta.reflection.traits#lib:has_virtual_destructor "21.4.17 Reflection type traits [meta.reflection.traits]")<T>::value; template<class T>constexpr bool [has_unique_object_representations_v](#lib:has_unique_object_representations_v "21.3.3 Header <type_­traits> synopsis [meta.type.synop]")= [has_unique_object_representations](meta.reflection.traits#lib:has_unique_object_representations "21.4.17 Reflection type traits [meta.reflection.traits]")<T>::value; template<class T, class U>constexpr bool [reference_constructs_from_temporary_v](#lib:reference_constructs_from_temporary_v "21.3.3 Header <type_­traits> synopsis [meta.type.synop]")= [reference_constructs_from_temporary](meta.reflection.traits#lib:reference_constructs_from_temporary "21.4.17 Reflection type traits [meta.reflection.traits]")<T, U>::value; template<class T, class U>constexpr bool [reference_converts_from_temporary_v](#lib:reference_converts_from_temporary_v "21.3.3 Header <type_­traits> synopsis [meta.type.synop]")= [reference_converts_from_temporary](meta.reflection.traits#lib:reference_converts_from_temporary "21.4.17 Reflection type traits [meta.reflection.traits]")<T, U>::value; // [[meta.unary.prop.query]](meta.unary.prop.query "21.3.7 Type property queries"), type property queriestemplate<class T>constexpr size_t [alignment_of_v](#lib:alignment_of_v "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = [alignment_of](meta.reflection.layout#lib:alignment_of "21.4.11 Reflection layout queries [meta.reflection.layout]")<T>::value; template<class T>constexpr size_t [rank_v](#lib:rank_v "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = [rank](meta.reflection.traits#lib:rank "21.4.17 Reflection type traits [meta.reflection.traits]")<T>::value; template<class T, unsigned I = 0>constexpr size_t [extent_v](#lib:extent_v "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = [extent](meta.reflection.traits#lib:extent "21.4.17 Reflection type traits [meta.reflection.traits]")<T, I>::value; // [[meta.rel]](meta.rel "21.3.8 Relationships between types"), type relationstemplate<class T, class U>constexpr bool [is_same_v](#lib:is_same_v "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = [is_same](meta.rel#lib:is_same "21.3.8 Relationships between types [meta.rel]")<T, U>::value; template<class Base, class Derived>constexpr bool [is_base_of_v](#lib:is_base_of_v "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = [is_base_of](meta.rel#lib:is_base_of "21.3.8 Relationships between types [meta.rel]")<Base, Derived>::value; template<class Base, class Derived>constexpr bool [is_virtual_base_of_v](#lib:is_virtual_base_of_v "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = [is_virtual_base_of](meta.rel#lib:is_virtual_base_of "21.3.8 Relationships between types [meta.rel]")<Base, Derived>::value; template<class From, class To>constexpr bool [is_convertible_v](#lib:is_convertible_v "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = [is_convertible](meta.rel#lib:is_convertible "21.3.8 Relationships between types [meta.rel]")<From, To>::value; template<class From, class To>constexpr bool [is_nothrow_convertible_v](#lib:is_nothrow_convertible_v "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = [is_nothrow_convertible](meta.rel#lib:is_nothrow_convertible "21.3.8 Relationships between types [meta.rel]")<From, To>::value; template<class T, class U>constexpr bool [is_layout_compatible_v](#lib:is_layout_compatible_v "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = [is_layout_compatible](meta.rel#lib:is_layout_compatible "21.3.8 Relationships between types [meta.rel]")<T, U>::value; template<class Base, class Derived>constexpr bool [is_pointer_interconvertible_base_of_v](#lib:is_pointer_interconvertible_base_of_v "21.3.3 Header <type_­traits> synopsis [meta.type.synop]")= [is_pointer_interconvertible_base_of](meta.rel#lib:is_pointer_interconvertible_base_of "21.3.8 Relationships between types [meta.rel]")<Base, Derived>::value; template<class Fn, class... ArgTypes>constexpr bool [is_invocable_v](#lib:is_invocable_v "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = [is_invocable](meta.rel#lib:is_invocable "21.3.8 Relationships between types [meta.rel]")<Fn, ArgTypes...>::value; template<class R, class Fn, class... ArgTypes>constexpr bool [is_invocable_r_v](#lib:is_invocable_r_v "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = [is_invocable_r](meta.rel#lib:is_invocable_r "21.3.8 Relationships between types [meta.rel]")<R, Fn, ArgTypes...>::value; template<class Fn, class... ArgTypes>constexpr bool [is_nothrow_invocable_v](#lib:is_nothrow_invocable_v "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = [is_nothrow_invocable](meta.rel#lib:is_nothrow_invocable "21.3.8 Relationships between types [meta.rel]")<Fn, ArgTypes...>::value; template<class R, class Fn, class... ArgTypes>constexpr bool is_nothrow_invocable_r_v = is_nothrow_invocable_r<R, Fn, ArgTypes...>::value; template<class Fn, class Tuple>constexpr bool [is_applicable_v](#lib:is_applicable_v "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = is_applicable<Fn, Tuple>::value; template<class Fn, class Tuple>constexpr bool [is_nothrow_applicable_v](#lib:is_nothrow_applicable_v "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = is_nothrow_applicable<Fn, Tuple>::value; // [[meta.logical]](meta.logical "21.3.10 Logical operator traits"), logical operator traitstemplate<class... B>constexpr bool [conjunction_v](#lib:conjunction_v "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = [conjunction](meta.logical#lib:conjunction "21.3.10 Logical operator traits [meta.logical]")<B...>::value; template<class... B>constexpr bool [disjunction_v](#lib:disjunction_v "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = [disjunction](meta.logical#lib:disjunction "21.3.10 Logical operator traits [meta.logical]")<B...>::value; template<class B>constexpr bool [negation_v](#lib:negation_v "21.3.3 Header <type_­traits> synopsis [meta.type.synop]") = [negation](meta.logical#lib:negation "21.3.10 Logical operator traits [meta.logical]")<B>::value; // [[meta.member]](meta.member "21.3.11 Member relationships"), member relationshipstemplate<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; // [[meta.const.eval]](meta.const.eval "21.3.12 Constant evaluation context"), constant evaluation contextconstexpr bool is_constant_evaluated() noexcept; consteval bool is_within_lifetime(const auto*) noexcept;}
