Named requirements: ProFacade
A type F
meets the ProFacade requirements of a type P
if F
meets the ProBasicFacade requirements, and the following expressions are well-formed and have the specified semantics.
Expressions | Semantics |
---|---|
typename F::convention_types |
A tuple-like type that contains any number of distinct types Cs . Each type C in Cs shall meet the ProConvention requirements of P . |
typename F::reflection_types |
A tuple-like type that contains any number of distinct types Rs . Each type R in Rs shall meet the ProReflection requirements of P . |
F::max_size |
A core constant expression of type std::size_t that shall be greater than or equal to sizeof(P) . |
F::max_align |
A core constant expression of type std::size_t that shall be greater than or equal to alignof(P) . |
F::copyability |
A core constant expression of type constraint_level that defines the required copyability of P . |
F::relocatability |
A core constant expression of type constraint_level that defines the required relocatability of P . |
F::destructibility |
A core constant expression of type constraint_level that defines the required destructibility of P . |
Notes
Relocatability is defined as move-construct an object and then destroy the original instance. Specifically, the value of F::relocatability
maps to the following requirements on P
:
Value | Requirement on P |
---|---|
constraint_level::none |
None |
constraint_level::nontrivial |
(std::is_move_constructible_v<P> && std::is_destructible_v<P>) || is_bitwise_trivially_relocatable_v<P> |
constraint_level::nothrow |
(std::is_nothrow_move_constructible_v<P> && std::is_nothrow_destructible_v<P>) || is_bitwise_trivially_relocatable_v<P> |
constraint_level::trivial |
is_bitwise_trivially_relocatable_v<P> |