Warum in Allocators propagate_on_container_swap == false zulassen, wenn dies undefiniertes Verhalten verursachen kann?
Hinweis: Ursprünglich gefragt vonMatt Mcnabb Als einKommentar aufWarum kann das Austauschen von Standardbibliothekscontainern in C ++ 11 (unter Einbeziehung von Zuordnern) problematisch sein?.
Der Standard (N3797) sagt, dass wennprogagate_on_container_swap
in einemAllocator iststd::false_type
es wird nachgebenundefiniertes Verhalten wenn die beiden beteiligten Allokatoren nicht gleich sind.
23.2.1p9
Allgemeine Behälteranforderungen [container.requirements.general]
Wennallocator_traits<allocator_type>::propagate_on_container_swap::value
isttrue
, dann die Allokatoren vona
undb
wird auch durch einen nicht qualifizierten Anruf an Nichtmitglieder ausgetauschtswap
. Andernfalls werden sie nicht getauscht, und das Verhalten ist undefiniert, sofern nichta.get_allocator() == b.get_allocator()
.