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> |