C++ benannte Anforderungen: CopyInsertable (seit C++11)
Gibt an, dass ein Objekt vom Typ mit einem gegebenen Alloziator in-place kopierkonstruiert werden kann.
[bearbeiten] Anforderungen
Gegeben die folgenden Typen, Werte und Ausdrücke
| Typ | Definition |
T
|
ein Objekttyp |
A
|
ein Allokator-Typ |
X
|
ein Containertyp, der alle folgenden Bedingungen erfüllt
|
| Wert | Definition |
| m | ein lvalue vom Typ A |
| p | ein Zeiger vom Typ T* |
| Ausdruck | Definition |
| v | ein Ausdruck, der auf ein lvalue vom Typ T / const T oder ein rvalue vom Typ const T verweist |
| expr | std::allocator_traits<A>::construct(m, p, v) |
T ist in X CopyInsertable, wenn alle folgenden Bedingungen erfüllt sind:
-
Tist inXMoveInsertable. - expr ist wohlgeformt.
- Die Auswertung von expr ändert den Wert von v nicht.
- Unmittelbar nach der Auswertung von expr ist der Wert von v äquivalent zu *p.
[bearbeiten] Hinweise
Wenn A std::allocator<T> ist, wird placement new aufgerufen, wie durch ::new((void*)p) T(v)(bis C++20)std::construct_at(p, v)(seit C++20).
Obwohl bis C++23 gefordert war, dass ein angepasster construct beim Konstruieren von Elementen von std::basic_string verwendet wird, haben alle Implementierungen nur den Standardmechanismus genutzt. Die Anforderung wurde durch P1072R10 korrigiert, um die bestehende Praxis anzupassen.
[bearbeiten] Fehlerberichte
Die folgenden Verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | angewendet auf | Verhalten wie veröffentlicht | Korrigiertes Verhalten |
|---|---|---|---|
| LWG 2177 | C++11 | Die Auswertung von expr hatte keine Nachbedingung | hinzugefügt |
| LWG 3957 | C++11 | v könnte auf ein rvalue vom Typ T verweisen |
ausgeschlossen |