Зачем разрешать `распространять_он_контейнер_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().

Ответы на вопрос(2)

Ваш ответ на вопрос