Мне было интересно с моим коллегой сегодня, можно ли реализовать std::vector, чтобы использовать небольшую оптимизацию буфера. Просмотрев проект С++ 11, я прочитал в 23.3.1p8
Выражение a.swap(b) для контейнеров a и b стандартного типа контейнера, отличного от массива, должно обменивать значения a и b без вызова операций перемещения, копирования или свопинга для отдельных элементов контейнера.
Вначале кажется, что он запрещает оптимизацию небольших буферов, но в соответствии с правилом as-if нам будет разрешено выполнять небольшую оптимизацию буфера для типов неклассов (поскольку мы не можем наблюдать за выполняемой копией). Следующий текст кажется сложнее "обмануть"
Каждый итератор, ссылающийся на элемент в одном контейнере перед свопом, должен ссылаться на тот же элемент в другом контейнере после свопинга.
Достаточно ли этого, чтобы предотвратить реализацию оптимизации малого буфера для std::vector? Есть ли какие-либо другие дорожные блоки или в конечном итоге возможно иметь std::vector с SBO?