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