Реализация std::vector
, поставляемая с Visual Studio 2010 и более ранними версиями, имеет хорошо известную особенность: метод resize
имеет следующую сигнатуру (совместимую с C ++ 03):
void resize(size_type new_size, value_type value);
вместо C ++ 11-совместимой подписи, которая использовалась большинством других реализаций STL (например, gcc STL или STLport) задолго до C ++ 11:
void resize(size_type new_size, const value_type& value);
Проблема с первым вариантомявляется то, что в некоторых ситуациях он не сможет скомпилироваться, если value_type
имеет спецификацию выравнивания:
struct __declspec(align(64)) S { ... };
std::vector<S> v; // error C2719: '_Val': formal parameter with __declspec(align('64')) won't be aligned
Это скважина известная проблема безудовлетворительный обходной путь, за исключением использования другой реализации std::vector
.
Я ищу хорошо написанную, хорошо протестированную, автономную и совместимую с STL реализацию std::vector
сЛицензия в стиле MIT , которую я могу добавить в свой проект в качестве контейнера выбора для выровненных типов.
Я подумал о том, чтобы извлечь его из STLport или STL gcc, но, будучи полностью совместимым со стандартом, thОни оба велики со многими нетривиальными зависимостями.
(Я был бы совершенно счастлив, если бы реализовал разумное подмножество std::vector
, которое поддерживало бы только push_back
, clear
, capacity
, size
, reserve
, resize
, swap
и индексация массива.)
Есть идеи?