Примечание: Первоначально заданный Matt Mcnabb как comment on Почему замена стандартных контейнеров библиотек может быть проблематичной в С++ 11 (с участием распределителей)?.
Стандарт (N3797) говорит, что если progagate_on_container_swap
внутри Allocator std::false_type
, он даст поведение undefined если задействованные два распределителя не сравниваются с равными.
- Почему Стандарт допускает такую конструкцию, когда она кажется более чем опасной?
23.2.1p9
Общие требования к контейнерам[container.requirements.general]
Если
allocator_traits<allocator_type>::propagate_on_container_swap::value
true
, то распределителиa
иb
также должны быть обменены используя неквалифицированный вызов не-членуswap
. В противном случае они должны не меняются местами, а поведение undefined, еслиa.get_allocator() == b.get_allocator()
.