C++ named requirements: MoveInsertable (since C++11)
Spécifie qu'un objet du type peut être construit dans un stockage non initialisé à partir d'une rvalue de ce type par un allocateur 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 :
|
| Valeur | Définition |
| m |
une lvalue de type
A
|
| p |
un pointeur de type
T*
|
| Expression | Définition |
| rv |
une expression désignant une rvalue de type
T
|
| expr | std:: allocator_traits < A > :: construct ( m, p, rv ) |
T
est
MoveInsertable
dans
X
si toutes les conditions suivantes sont satisfaites :
- expr est bien formé.
- Immédiatement après l'évaluation de expr , la valeur de * p est équivalente à la valeur de rv avant l'évaluation.
Notes
Si
A
est
std::
allocator
<
T
>
, alors cela appellera le placement
new
, comme par
::
new
(
(
void
*
)
p
)
T
(
rv
)
(jusqu'à C++20)
std::
construct_at
(
p, rv
)
(depuis C++20)
. Cela nécessite effectivement que
T
soit déplaçable constructible.
Si
std::
allocator
<
T
>
ou un allocateur similaire est utilisé, une classe n'a pas besoin d'implémenter un
constructeur de déplacement
pour satisfaire cette exigence de type : un
constructeur de copie
qui prend un argument
const
T
&
peut lier des expressions rvalue. Si une classe
MoveInsertable
implémente un constructeur de déplacement, elle peut également mettre en œuvre les
sémantiques de déplacement
pour tirer parti du fait que la valeur de
rv
après la construction n'est pas spécifiée.
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 |
Voir aussi
| CopyInsertable |