Skip to content

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>

See Also