Namespaces
Variants

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

From cppreference.net
C++ named requirements

Spécifie qu'un objet du type peut être détruit par un Allocator donné.

Table des matières

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*

Si l'expression std:: allocator_traits < A > :: destroy ( m, p ) est bien formée, T est Effaçable de X .

Notes

Tous les conteneurs de la bibliothèque standard exigent que leurs types de valeur satisfassent Erasable .

Avec l'allocateur par défaut, cette exigence équivaut à la validité de p - > ~T ( ) , qui accepte les types de classe avec des destructeurs accessibles et tous les types scalaires, mais rejette les types tableau, les types fonction, les types référence et void .

(jusqu'à C++20)

Avec l'allocateur par défaut, cette exigence équivaut à la validité de std:: destroy_at ( p ) , qui accepte les types de classe avec des destructeurs accessibles et tous les types scalaires, ainsi que leurs tableaux.

(depuis C++20)

Bien qu'il soit requis qu'un destructeur personnalisé destroy soit utilisé lors de la destruction 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 Applicable à Comportement publié Comportement corrigé
N3346 C++11 aucune exigence n'était spécifiée pour déterminer si un type
dont les objets peuvent être détruits à l'aide d'allocateurs
exigence ajoutée

Voir aussi

CopyInsertable
MoveInsertable
EmplaceConstructible
Destructible