I'm confused by libc++'s use of allocator_traits, for instance in
vector:898:
__alloc_traits::__construct_backward(this->__alloc(),
this->__begin_, this->__end_, __v.__begin_);
The standard seems to not require the existence of a member called
__construct_backward. Seemingly standard-conforming, user provided
specializations of this trait (for a user provided allocator) thus fail
to compile.
Am I misinterpreting allocator_trait as a customization point?
I'm confused by libc++'s use of allocator_traits, for instance in
vector:898:
__alloc_traits::__construct_backward(this->__alloc(),
this->__begin_, this->__end_, __v.__begin_);
The standard seems to not require the existence of a member called
__construct_backward. Seemingly standard-conforming, user provided
specializations of this trait (for a user provided allocator) thus fail
to compile.
Am I misinterpreting allocator_trait as a customization point?
I would have thought so, because my understanding was that the allocator
was the customization point, where as allocator_traits was the interface
used
to deal with the custom allocator.
However, the standard seems to disagree with me, noting that users
may specialize `allocator_traits`.