Примечание: Первоначально заданный 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::valuetrue, то распределителиaиbтакже должны быть обменены используя неквалифицированный вызов не-членуswap. В противном случае они должны не меняются местами, а поведение undefined, еслиa.get_allocator() == b.get_allocator().