Namespaces
Variants

C++ named requirements: CopyInsertable (since C++11)

From cppreference.net
C++ named requirements

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:
  • X::value_type ist identisch mit T .
  • X::allocator_type ist identisch mit std:: allocator_traits < A > :: rebind_alloc < T > .
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:

  • T ist MoveInsertable in X .
  • 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