¿Todavía es posible personalizar el tipo de "referencia" del vector STL?

¿Es posible personalizar elreference de unstd::vector. Hasta C ++ 11 parecía posible a través deAllocator parámetro de plantilla ¿Pero ya no más?

De acuerdo con la documentación,http://en.cppreference.com/w/cpp/container/vector, reference ahora es siemprevalue_type yvalue_type es siempre el parámetro de plantillaT.

Parece ser imposible incluso usarallocator_traits, http://en.cppreference.com/w/cpp/memory/allocator_traits

¿Hay una solución para esto?

Si no, ¿significa que tengo que especializar todo elstd::vector y probablemente reproduzca toda su funcionalidad si quiero tener un especialreference tipo basado en el asignador?

Si es así, en general, ¿cuál es la lógica de todas estas restricciones? Para obligar al usuario a usarstd::vector<T, A> para administrar siempre la memoria regular (en la cual,value_type = T, reference = T& ypointer = T*?)

Nota: soy consciente de lastd::vector<bool> controversia. Sin embargo, esto es un poco más general porque, en principio, necesito una costumbrestd::vector<RegularType, special_allocator<RegularType>> principalmente para controlar el tipo de retorno deoperator[](int) a un objeto proxy especial.

Implementación específica: estoy mirando la fuente stdlib de GCC 6.3.1 y enstd_vector.h uno puede leer:

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

lo que parece indicar que todavía es posible especificar un tipo de referencia a través deallocator (_traits?)

De acuerdo con la documentación,allocator o laallocator_traits no necesita tener unreference tipo. Además, no sé cómo personalizar este tipo de todos modos.

¿GCC no sigue el estándar? ¿O es simplemente que indirectamenteallocator_traits<Allocator>::reference se ve obligado a serallocator_traits<Allocator>::value_type&?

Respuestas a la pregunta(1)

Su respuesta a la pregunta