¿Por qué permitir `propagate_on_container_swap == false` en Allocators, cuando puede causar un comportamiento indefinido?
Nota: Originalmente preguntado porMatt Mcnabb como uncomentario en¿Por qué el intercambio de contenedores de biblioteca estándar puede ser problemático en C ++ 11 (que involucra asignadores)?.
El estandar (N3797) dice que siprogagate_on_container_swap
dentro de unAsignador esstd::false_type
rendirácomportamiento indefinido si los dos asignadores involucrados no se comparan igual.
23.2.1p9
Requisitos generales de contenedores [container.requirements.general]
Siallocator_traits<allocator_type>::propagate_on_container_swap::value
estrue
, entonces los asignadores dea
yb
también se intercambiará mediante una llamada no calificada a un no miembroswap
. De lo contrario, no se intercambiarán, y el comportamiento es indefinido a menos quea.get_allocator() == b.get_allocator()
.