[ 2024-05-09; Jonathan provides wording ]
We could also relax the type completeness requirements for `reference_converts_from_temporary` and `reference_constructs_from_temporary`, as the result is always false if the first type is a non-reference, so we don't need complete types in that case. This doesn't seem important to support, but if we wanted to then we could say:
Either `T` is not a reference type, or`T` and`U` shall be a complete typecomplete types, cv `void`, or an arrayarraysof unknown bound.
This wording is relative to n4981.
- In [meta.unary.prop] Table 51, change the Preconditions text for `is_constructible`, `is_trivially_constructible`, `is_nothrow_constructible`, `is_convertible`, and `is_nothrow_convertible`, as indicated.
Template Condition Preconditions … … … template<class T, class... Args> struct is_constructible;
For a function type `T` or for a cv `void` type `T`, is_constructible_v<T, Args...>
is `false`, otherwise see below .Either `T` is a reference type and `Args` contains a single type that is similar ([conv.qual]) to remove_reference_t<T>
, or `T` and all types in the template parameter pack `Args` shall be complete types, cv `void`, or arrays of unknown bound.… … … template<class T, class... Args> struct is_trivially_constructible;
is_constructible_v<T, Args...>
is `true` and the variable definition for `is_constructible`, as defined below, is known to call no operation that is not trivial ([basic.types.general], [special]).Either `T` is a reference type and `Args` contains a single type that is similar ([conv.qual]) to remove_reference_t<T>
, or `T` and all types in the template parameter pack `Args` shall be complete types, cv `void`, or arrays of unknown bound.… … … template<class T, class... Args> struct is_nothrow_constructible;
is_constructible_v<T, Args...>
is `true` and the variable definition for `is_constructible`, as defined below, is known not to throw any exceptions ([expr.unary.noexcept]).Either `T` is a reference type and `Args` contains a single type that is similar ([conv.qual]) to remove_reference_t<T>
, or `T` and all types in the template parameter pack `Args` shall be complete types, cv `void`, or arrays of unknown bound.… … … - In [meta.rel] Table 53, change the Comments text for `is_convertible` and `is_nothrow_convertible` as indicated.
Template Condition Comments … … … template<class From, class To> struct is_convertible;
see below Either `To` is a reference type and `From` is similar ([conv.qual]) to remove_reference_t<To>
, or `From` and `To` shall be complete types, cv `void`, or arrays of unknown bound.template<class From, class To> struct is_nothrow_convertible;
is_convertible_v<From, To>
is `true` and the conversion, as defined by `is_convertible`, is known not to throw any exceptions ([expr.unary.noexcept]).Either `To` is a reference type and `From` is similar ([conv.qual]) to remove_reference_t<To>
, or `From` and `To` shall be complete types, cv `void`, or arrays of unknown bound.