Requisitos denominados de C++:CopyInsertable(desde C++11)
Especifica que un objeto del tipo puede construirse por copia en el sitio por un asignador de memoria dado.
[editar]Requisitos
Dados los siguientes tipos, valores y expresiones:
Tipo | Definición |
T | un tipo objeto |
A | un tipo asignador de memoria |
X | un tipo contenedor que satisface todas las siguientes condiciones:
|
Valor | Definición |
m | un l-valor de tipo A |
p | un puntero de tipo T* |
Expresión | Definición |
v | una expresión que denota un l-valor de tipo T / const T, o un r-valor de tipo const T |
expr | std::allocator_traits<A>::construct(m, p, v) |
T
es CopyInsertable en X
si se satisfacen todas las condiciones siguientes:
T
es MoveInsertable eX
.- expr está bien formado.
- La evaluación de expr no cambia el valor de v.
- Inmediatamente después de la evaluación de expr, el valor de v es equivalente a *p.
[editar]Notas
Si A
es std::allocator<T>, entonces esto llamará a new de ubicación, como si fuera por ::new((void*)p) T(v)(hasta C++20)std::construct_at(p, v)(desde C++20).
Si bien hasta C++23 se requería que se utilizara una implementación de construct
personalizada al construir elementos de std::basic_string, todas las implementaciones solo usaban el mecanismo por defecto. El requisito se corrige mediante P1072R10 para que coincida con la práctica existente.
[editar]Informes de defectos
Los siguientes informes de defectos de cambio de comportamiento se aplicaron de manera retroactiva a los estándares de C++ publicados anteriormente.
ID | Aplicado a | Comportamiento según lo publicado | Comportamiento correcto |
---|---|---|---|
LWG 2177 | C++11 | la evaluación de expr no tenía ninguna condición posterior | añadida |
LWG 3957 | C++11 | v podía denotar un r-valor de tipo T | excluido |