Ainda é possível personalizar o tipo de "referência" do vetor STL?

É possível personalizar oreference de umstd::vector. Até C ++ 11, parecia possível através doAllocator parâmetro de modelo. Mas não mais?

De acordo com a documentação,http://en.cppreference.com/w/cpp/container/vector, reference agora é semprevalue_type evalue_type é sempre o parâmetro do modeloT.

Parece impossível mesmo usandoallocator_traits, http://en.cppreference.com/w/cpp/memory/allocator_traits

Existe uma solução alternativa para isso?

Caso contrário, isso significa que eu tenho que especializar todostd::vector e provavelmente reproduza toda a sua funcionalidade se eu quiser ter um especialreference tipo baseado no alocador?

Se é assim, de um modo geral, qual é a lógica de todas essas restrições? Para forçar o usuário a usarstd::vector<T, A> para gerenciar sempre a memória regular (na qual,value_type = T, reference = T& epointer = T*?)

Nota: Estou ciente dasstd::vector<bool> controvérsia. No entanto, isso é um pouco mais geral, porque, em princípio, eu preciso de um costumestd::vector<RegularType, special_allocator<RegularType>> principalmente para controlar o tipo de retorno deoperator[](int) para um objeto proxy especial.

Implementação específica: estou olhando a fonte stdlib do GCC 6.3.1 e emstd_vector.h pode-se ler:

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

o que parece indicar que ainda é possível especificar um tipo de referência viaallocator (_traits?).

De acordo com a documentação,allocator ou oallocator_traits não precisa ter umreference tipo. Além disso, não sei como personalizar esse tipo.

O GCC não está seguindo o padrão? Ou é simplesmente que indiretamenteallocator_traits<Allocator>::reference é forçado a serallocator_traits<Allocator>::value_type&?

questionAnswers(1)

yourAnswerToTheQuestion