Los requisitos del contenedor han cambiado de C ++ 03 a C ++ 11. Mientras que C ++ 03 tenía requisitos generales (p. Ej., Copia de construcción y asignabilidad para vector), C ++ 11 define requisitos detallados en cada operación de contenedor (sección 23.2).
Como resultado, puede, por ejemplo, almacenar un tipo que es copia-construible pero no asignable, como una estructura con un miembro constante, en un vector siempre que solo realice ciertas operaciones que no requieren asignación (construcción y push_back
son tales operaciones ; insert
no es).
Lo que me pregunto es: ¿significa esto que el estándar ahora lo permite vector<const T>
? No veo ninguna razón por la que no debería const T
, al igual que una estructura con un miembro constante, es un tipo que es copia construible pero no asignable, pero puede que me haya perdido algo.
(Parte de lo que me hace pensar que me he perdido algo es que el tronco gcc se bloquea y se quema si intenta crear una instancia vector<const T>
, pero está bien vector<T>
si T tiene un miembro constante).
address
funciones miembro sobrecargadas en el asignador predeterminado: cuando T es constante, estas dos sobrecargas tienen la misma firma. Una forma fácil de corregir esto sería especializarsestd::allocator<const T>
y eliminar una de las sobrecargas.