diff --git a/source/meta.tex b/source/meta.tex index 01d59f0f23..bfebda45c9 100644 --- a/source/meta.tex +++ b/source/meta.tex @@ -242,6 +242,7 @@ template struct is_final; template struct is_aggregate; + template struct is_structural; template struct is_signed; template struct is_unsigned; template struct is_bounded_array; @@ -493,6 +494,8 @@ constexpr bool @\libglobal{is_final_v}@ = is_final::value; template constexpr bool @\libglobal{is_aggregate_v}@ = is_aggregate::value; + template + constexpr bool @\libglobal{is_structural_v}@ = is_structural::value; template constexpr bool @\libglobal{is_signed_v}@ = is_signed::value; template @@ -932,6 +935,12 @@ \tcode{T} is an aggregate type\iref{dcl.init.aggr} & \tcode{T} shall be an array type, a complete type, or \cv~\keyword{void}. \\ \rowsep +\indexlibraryglobal{is_structural}% +\tcode{template}\br + \tcode{struct is_structural;} & + \tcode{T} is a structural type\iref{temp.param} & + \tcode{remove_all_extents_t} shall be a complete type or \cv~\keyword{void}. \\ \rowsep + \indexlibrary{\idxcode{is_signed}!class}% \tcode{template}\br \tcode{struct is_signed;} & @@ -2901,6 +2910,7 @@ consteval bool is_abstract_type(info type); consteval bool is_final_type(info type); consteval bool is_aggregate_type(info type); + consteval bool is_structural_type(info type); consteval bool is_signed_type(info type); consteval bool is_unsigned_type(info type); consteval bool is_bounded_array_type(info type); @@ -6732,6 +6742,7 @@ consteval bool @\libglobal{is_abstract_type}@(info type); consteval bool @\libglobal{is_final_type}@(info type); consteval bool @\libglobal{is_aggregate_type}@(info type); +consteval bool @\libglobal{is_structural_type}@(info type); consteval bool @\libglobal{is_signed_type}@(info type); consteval bool @\libglobal{is_unsigned_type}@(info type); consteval bool @\libglobal{is_bounded_array_type}@(info type); diff --git a/source/support.tex b/source/support.tex index 45e6b1795b..e86cf14734 100644 --- a/source/support.tex +++ b/source/support.tex @@ -746,6 +746,8 @@ #define @\defnlibxname{cpp_lib_is_null_pointer}@ 201309L // freestanding, also in \libheader{type_traits} #define @\defnlibxname{cpp_lib_is_pointer_interconvertible}@ 201907L // freestanding, also in \libheader{type_traits} #define @\defnlibxname{cpp_lib_is_scoped_enum}@ 202011L // freestanding, also in \libheader{type_traits} +#define @\defnlibxname{cpp_lib_is_structural}@ 202603L + // freestanding, also in \libheader{meta} and \libheader{type_traits} #define @\defnlibxname{cpp_lib_is_sufficiently_aligned}@ 202411L // freestanding, also in \libheader{memory} #define @\defnlibxname{cpp_lib_is_swappable}@ 201603L // freestanding, also in \libheader{type_traits} #define @\defnlibxname{cpp_lib_is_virtual_base_of}@ 202406L // freestanding, also in \libheader{type_traits}