Namensräume
Varianten
Aktionen

C++ benannte Anforderungen: CopyInsertable (seit C++11)

Von cppreference.com
 
 
C++ benannte Anforderungen
 

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
  • X::value_type ist dasselbe wie T.
  • X::allocator_type ist dasselbe wie 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 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:

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