C++ named requirements: CopyInsertable (since C++11)
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Gibt an, dass ein Objekt des Typs durch einen gegebenen Allokator direkt an Ort und Stelle kopierkonstruiert werden kann.
Anforderungen
Gegeben die folgenden Typen, Werte und Ausdrücke:
| Typ | Definition |
T
|
ein Objekttyp |
A
|
ein Allokatortyp |
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 einen Lvalue vom Typ
T
/
const
T
oder einen Rvalue vom Typ
const
T
bezeichnet
|
| expr | std:: allocator_traits < A > :: construct ( m, p, v ) |
T
ist
CopyInsertable
in
X
, wenn alle folgenden Bedingungen erfüllt sind:
-
Tist MoveInsertable inX. - expr ist wohlgeformt.
- Die Auswertung von expr ändert nicht den Wert von v .
- Unmittelbar nach der Auswertung von expr ist der Wert von v äquivalent zu * p .
Hinweise
Wenn
A
ein
std::
allocator
<
T
>
ist, dann ruft dies Placement-
new
auf, wie durch
::
new
(
(
void
*
)
p
)
T
(
v
)
(bis C++20)
std::
construct_at
(
p, v
)
(seit C++20)
.
Obwohl es bis C++23 erforderlich war, dass benutzerdefinierte
construct
verwendet werden, wenn Elemente von
std::basic_string
konstruiert werden, haben alle Implementierungen nur den Standardmechanismus verwendet. Die Anforderung wurde durch
P1072R10
korrigiert, um der bestehenden Praxis zu entsprechen.
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 | Auswertung von expr hatte keine Nachbedingung | hinzugefügt |
| LWG 3957 | C++11 |
v
konnte einen R-Wert vom Typ
T
bezeichnen
|
ausgeschlossen |