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.

Warum sollte der Standard ein solches Konstrukt zulassen, wenn es mehr als gefährlich erscheint?

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

Antworten auf die Frage(2)

Ihre Antwort auf die Frage