Namespaces
Variants

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

From cppreference.net
C++ named requirements

Spécifie qu'un objet du type peut être construit par copie in-situ par un allocateur donné.

Exigences

Étant donné les types, valeurs et expressions suivants :

Type Définition
T un type d'objet
A un type d'allocateur
X un type de conteneur satisfaisant toutes les conditions suivantes :
  • X::value_type est identique à T .
  • X::allocator_type est identique à std:: allocator_traits < A > :: rebind_alloc < T > .
Valeur Définition
m une lvalue de type A
p un pointeur de type T*
Expression Définition
v une expression désignant une lvalue de type T / const T , ou une rvalue de type const T
expr std:: allocator_traits < A > :: construct ( m, p, v )

T est CopyInsertable dans X si toutes les conditions suivantes sont satisfaites :

  • T est MoveInsertable dans X .
  • expr est bien formé.
  • L'évaluation de expr ne modifie pas la valeur de v .
  • Immédiatement après l'évaluation de expr , la valeur de v est équivalente à * p .

Notes

Si A est std:: allocator < T > , alors cela appellera le placement new , comme par :: new ( ( void * ) p ) T ( v ) (jusqu'en C++20) std:: construct_at ( p, v ) (depuis C++20) .

Bien qu'il soit requis qu'un construct personnalisé soit utilisé lors de la construction des éléments de std::basic_string jusqu'au C++23, toutes les implémentations n'ont utilisé que le mécanisme par défaut. Cette exigence est corrigée par P1072R10 pour correspondre à la pratique existante.

Rapports de défauts

Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.

DR Appliqué à Comportement publié Comportement corrigé
LWG 2177 C++11 l'évaluation de expr n'avait aucune postcondition ajoutée
LWG 3957 C++11 v pouvait désigner une rvalue de type T exclue