La implementación de std::vector
que se incluye con Visual Studio 2010 y versiones anteriores tiene una particularidad bien conocida: el método resize
tiene la siguiente firma (compatible con C++ 03) :Implementación autónoma compatible con STL de std :: vector
void resize(size_type new_size, value_type value);
en lugar de la firma C++ 11-compatible que se ha utilizado por la mayoría de otras implementaciones STL (como STL de gcc o STLport) mucho antes de C++ 11:
void resize(size_type new_size, const value_type& value);
el problema con la primera variante es que, en alguna situación ciones, se producirá un error de compilación si value_type
tiene una especificación de alineación:
struct __declspec(align(64)) S { ... };
std::vector<S> v; // error C2719: '_Val': formal parameter with __declspec(align('64')) won't be aligned
Este es un problema wellknown con ninguna solución satisfactoria aparte de usar una implementación diferente de std::vector
.
Busco un bien escrito bien probado, autónomo y con capacidad para un STL aplicación, de std::vector
con una licencia estilo MIT que podría caer en mi proyecto como un contenedor de elección para Alineados tipos.
Consideré extraerlo de STLport o STL de gcc pero, al ser totalmente compatibles con las normas, son grandes con muchas dependencias no triviales.
(me gustaría que perfectamente feliz con una implementación de un subconjunto razonable de std::vector
que sólo apoyaría push_back
, clear
, capacity
, size
, reserve
, resize
, swap
y la indexación de matrices.)
¿Alguna idea?
No veo cómo el método '.resize()' hace que la declaración 'std :: vector
v;' falle. La instanciación de una plantilla de clase no instancia sus métodos, solo los utilizados. (Es decir, ctor y dtor predeterminados en este caso). – MSaltersSupongo que el error se emite durante el análisis ... Tenga en cuenta que estamos hablando de un verdadero problema específico del compilador aquí. –