Por que permitir `propagate_on_container_swap == false` nos Alocadores, quando isso pode causar um comportamento indefinido?

Nota: Originalmente solicitado porMatt Mcnabb como umComente emPor que a troca de contêineres de biblioteca padrão pode ser problemática no C ++ 11 (envolvendo alocadores)?.

O padrão (N3797) diz que seprogagate_on_container_swap dentro de umAlocador éstd::false_type vai rendercomportamento indefinido se os dois alocadores envolvidos não compararem iguais.

Por que o Padrão permitiria tal construção quando parece mais do que perigoso?

23.2.1p9 Requisitos Gerais de Contêiner [container.requirements.general]

E seallocator_traits<allocator_type>::propagate_on_container_swap::value étrue, os alocadores dea eb também serão trocados usando uma chamada não qualificada para não-membrosswap. Caso contrário, eles não devem ser trocados e o comportamento é indefinido, a menos quea.get_allocator() == b.get_allocator().

questionAnswers(2)

yourAnswerToTheQuestion