Remarks: Automatically detects whether T has a nested allocator_type that
is convertible from Alloc.
Meets the BinaryTypeTrait
requirements ([meta.rqmts]).
The implementation shall provide a definition that is
derived from true_type if the qualified-idT::allocator_type
is valid and denotes a type ([temp.deduct]) and
is_convertible_v<Alloc, T::allocator_type> != false, otherwise it shall be
derived from false_type.
A program may specialize this template to derive from
true_type for a user-defined type T that does not have a nested
allocator_type but nonetheless can be constructed with an allocator where
either:
Uses-allocator construction with allocator Alloc refers to the
construction of an object obj of type T, using constructor arguments
v1, v2, ..., vN of types V1, V2, ..., VN, respectively, and an allocator
alloc of type Alloc, according to the following rules:
otherwise, if uses_allocator_v<T, Alloc> is true and
is_constructible_v<T, allocator_arg_t, Alloc,V1, V2, ..., VN> is
true, then obj is initialized as obj(allocator_arg, alloc, v1,
v2, ..., vN);
otherwise, if uses_allocator_v<T, Alloc> is true and
is_constructible_v<T, V1, V2, ..., VN, Alloc> is true, then
obj is initialized as obj(v1, v2, ..., vN, alloc);