C ++ 11 (und C ++ 14) STL-Container haben noexcept
destructors und clear()
member functions.
Dies bedeutet, dass die Elemente auch noexcept
destructors haben sollten, oder zumindest, dass die in Containern gespeicherten tatsächlichen Elemente keine Exceptions auslösen sollten, wenn sie zerstört werden - oder korrekterweise, dass der entsprechende allocator_traits<Allocator>::destroy
call nicht werfen sollte / p>
Wird dies als eine Anforderung (ausdrücklich oder implizit durch eine andere ausdrückliche Anforderung) irgendwo im Standard angegeben? Wenn nicht, warum?
Ich weiß, dass is_nothrow_constructible
einen noexcept
destructor benötigt, aber is_constructible
alone nicht, und die Containeranforderungen werden sowieso eher in Begriffen als in Templates für Typeigenschaften angegeben.
17.6.4.8/1 In bestimmten Fällen (Ersatzfunktionen, Handlerfunktionen, Operationen für Typen, die zur Standardisierung verwendet werden Bibliotheksvorlagen-Komponenten), hängt die C ++ - Standardbibliothek von Komponenten ab, die von einem C ++ - Programm bereitgestellt werden. Wenn diese Komponenten nicht ihren Anforderungen entsprechen, stellt der Standard keine Anforderungen an die Implementierung.
17.6.4.8/2 Insbesondere sind die Effekte in den folgenden Fällen undefiniert:
...
- wenn eine Ersatzfunktion oder eine Handler - Funktion oder ein Destruktor - Vorgang über eine Ausnahme beendet wird, es sei denn, dies ist in der anwendbar Erforderliches Verhalten: Absatz.