C++ named requirements: Erasable (since C++11)
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Especifica que un objeto del tipo puede ser destruido por un Allocator dado.
Contenidos |
Requisitos
Dados los siguientes tipos, valores y expresiones:
| Tipo | Definición |
T
|
un tipo de objeto |
A
|
un tipo de asignador |
X
|
un tipo de contenedor que satisface todas las siguientes condiciones:
|
| Valor | Definición |
| m |
un lvalue de tipo
A
|
| p |
un puntero de tipo
T*
|
Si la expresión
std::
allocator_traits
<
A
>
::
destroy
(
m, p
)
está bien formada,
T
es
Erasable
de
X
.
Notas
Todos los contenedores de la biblioteca estándar requieren que sus tipos de valor satisfagan Erasable .
|
Con el asignador por defecto, este requisito es equivalente a la validez de p - > ~T ( ) , que acepta tipos de clase con destructores accesibles y todos los tipos escalares, pero rechaza tipos array, tipos función, tipos referencia y void . |
(hasta C++20) |
|
Con el asignador por defecto, este requisito es equivalente a la validez de std:: destroy_at ( p ) , que acepta tipos de clase con destructores accesibles y todos los tipos escalares, así como arrays de los mismos. |
(desde C++20) |
Aunque se requería que se utilizara un
destroy
personalizado al destruir elementos de
std::basic_string
hasta C++23, todas las implementaciones solo utilizaron el mecanismo predeterminado. El requisito se corrigió mediante
P1072R10
para coincidir con la práctica existente.
Informes de defectos
Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares publicados anteriormente de C++.
| DR | Aplicado a | Comportamiento publicado | Comportamiento correcto |
|---|---|---|---|
| N3346 | C++11 |
no existía ningún requisito para especificar si un tipo
cuyos objetos pueden destruirse usando allocators |
se añadió el requisito |
Véase también
| CopyInsertable | |
| MoveInsertable | |
| EmplaceConstructible | |
| Destructible |