Ответ 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>;
Однако распределитель был определен до того, как такие псевдонимы были поддержаны С++. "
Таким образом, в целом стандартная библиотека догоняет смещение языка и парадигмы.