If you look at the relevant isocpp paper you can see that the first set you mention is now thought to be better placed in std::allocator_traits
. Since the STL (not even standard library) came out, there's been more of a shift to use traits.
rebind
is also a relic. When the STL first came out, aliases and template-template parameters were not supported. With these language features in existence, rebind
seems fairly convoluted. E.g., as you can see in an answer to this question, in The C++ Programming Language, 4th edition, section 34.4.1, p. 998, commenting the 'classical' rebind member in default allocator class :
template<typename U>
struct rebind { using other = allocator<U>;};
Bjarne Stroustupr writes this : "The curious rebind template is an archaic alias. It should have been:
template<typename U>
using other = allocator<U>;
However, allocator was defined before such aliases were supported by C++."
So, altogether, it's the standard library catching up with the language and paradigm shifts.
std::addressof
now to replace address(). Who needs max_size anyway; and the rest should be replaceable by placement new/explicit destructor invocation. – Nipponallocator_traits
that will fill in the missing parts. – Doggery