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.
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()
.