While looking at std::allocator, I see that members:
value_type
,
pointer
,
const_pointer
,
reference
,
const_reference
,
size_type
,
difference_type
, and
rebind
have all been deprecated.
Allocators will also no longer have the members:
address
, max_size
, construct
, or destroy
.
Why did this happen? Did it have something to do with polymophic allocators?
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.