Из N3290, [container.requirements.general]:
Выражение
a.swap(b)для контейнеров a и b стандартного типа контейнера, отличного отarray, должно обменивать значения a и b, не вызывая никаких операций перемещения, копирования или свопинга для отдельных элементов контейнера.
Как это взаимодействует с оптимизацией небольших строк? Забыли ли они добавить std::string?