C++ named requirements: CopyInsertable (since C++11)
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
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 :
|
| 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 :
-
Test MoveInsertable dansX. - 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 |