Почему std:: allocator потерял членские типы/функции в С++ 17?

При взгляде на std:: allocator, я вижу, что участники:
value_type pointer const_pointer reference const_reference size_type difference_type и rebind все устарели.

Отчисления также не будут иметь участников:
 address, max_size, construct или destroy.

Почему это произошло? Было ли это связано с полиморфными распределителями?

Ответ 1

Если вы посмотрите на соответствующую бумагу isocpp, вы можете увидеть, что первый набор, о котором вы упоминаете, теперь считается лучшим в std::allocator_traits. Поскольку STL (даже не стандартная библиотека) вышла, было больше изменений в использовании признаков.

rebind также является реликвией. Когда STL впервые вышел, псевдонимы и параметры шаблона шаблона не поддерживались. С этими языковыми особенностями, rebind кажется довольно запутанным. Например, как вы можете видеть в ответе на этот вопрос, на языке программирования С++, 4-е издание, раздел 34.4.1, с. 998, комментируя "классический" элемент обратной связи в классе распределителя по умолчанию:

template<typename U>
     struct rebind { using other = allocator<U>;};

Bjarne Stroustupr пишет это: "Любопытный шаблон повторной обработки - это архаический псевдоним. Он должен был быть:

template<typename U>
using other = allocator<U>;

Однако распределитель был определен до того, как такие псевдонимы были поддержаны С++. "

Таким образом, в целом стандартная библиотека догоняет смещение языка и парадигмы.