Можно ли по-прежнему настраивать «эталонный» тип вектора STL?

Можно ли настроитьreference изstd::vector, До C ++ 11 это казалось возможным черезAllocator параметр шаблона. Но не больше?

Согласно документации,http://en.cppreference.com/w/cpp/container/vector, reference сейчас всегдаvalue_type а такжеvalue_type всегда параметр шаблонаT.

Кажется невозможным даже при использованииallocator_traits, http://en.cppreference.com/w/cpp/memory/allocator_traits

Есть ли обходной путь для этого?

Если нет, значит ли это, что я должен специализировать весьstd::vector и, вероятно, воспроизвести все его функции, если я хочу иметь специальныйreference тип основан на распределителе?

Если это так, вообще говоря, какова логика для всех этих ограничений? Заставить пользователя использоватьstd::vector<T, A> всегда управлять обычной памятью (в которой,value_type = T, reference = T& а такжеpointer = T*?)

Примечание: я знаю оstd::vector<bool> полемика. Однако это немного более общий, потому что в принципе мне нужен обычайstd::vector<RegularType, special_allocator<RegularType>> в основном для контроля типа возвратаoperator[](int) на специальный объект прокси.

Конкретная реализация: я смотрю на источник stdlib GCC 6.3.1 и вstd_vector.h можно прочитать:

template<typename _Tp, ...>
class vector : ...{
   ...
   public:
   typedef typename _Alloc_traits::reference          reference;
};

который, по-видимому, указывает на то, что все еще возможно указать ссылочный тип черезallocator (_traits?).

Согласно документации,allocator илиallocator_traits не нужно иметьreference тип. Кроме того, я не знаю, как настроить этот тип в любом случае.

GCC не следует стандарту? Или это просто косвенноallocator_traits<Allocator>::reference вынужден бытьallocator_traits<Allocator>::value_type&?

Ответы на вопрос(1)

Ваш ответ на вопрос