[libc++] use of allocator_traits

Hi,

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?

Cheers, Axel.

Hi,

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`.

interesting. :frowning:

Please open a bug at bugs.llvm.org, and I'll look into it when I get back
from the LLVM devcon.

-- Marshall

This appears to make allocator_traits not really fit for purpose, since extending the allocator interface is still a breaking change. :frowning:

I guess the good news is that those calls are only used in <vector>

-- Marshall