cpp/memory/uses allocator

If has a member typedef  which is convertible from , the member constant  is. Otherwise is.

Uses-allocator construction
There are three conventions of passing an allocator to a constructor of some type :
 * if does not use a compatible allocator ( is false), then  is ignored.
 * otherwise, is true, and
 * if uses the leading-allocator convention (is invocable as ), then uses-allocator construction uses this form
 * if uses the trailing-allocator convention (is invocable as ), then uses-allocator construction uses this form
 * otherwise, the program is ill-formed (this means is true, but the type does not follow either of the two allowed conventions)


 * As a special case, std is treated as a uses-allocator type even though is false for pairs (unlike e.g. std): see pair-specific overloads of

Specializations
Custom specializations of the type trait std are allowed for types that do not have the member typedef but satisfy one of the following two requirements:

@1@ has a constructor which takes std as the first argument, and as the second argument. @2@ has a constructor which takes as the last argument.

In the above, is a type that satisfies.

The following specializations are already provided by the standard library: