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