Requisitos denominados de C++:Erasable(desde C++11)
Especifica que un objeto del tipo puede destruirse por un Asignador dado.
Contenido |
[editar]Requisitos
Dados los siguientes tipos, valores y expresiones:
Tipo | Definición |
T | un tipo objeto |
A | un tipo asignador |
X | un tipo contenedor se satisface todas las condiciones siguientes:
|
Valor | Definición |
m | un l-valor 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 Borrable a partir de X
.
[editar]Notas
Todos los contenedores de la biblioteca estándar requieren que sus tipos de valores satisfagan a 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) |
Si bien hasta C++23 se requiere que se use una destrucción
personalizada al destruir elementos de std::basic_string, todas las implementaciones solo usaban el mecanismo predeterminado. El requisito se corrigió por P1072R10 para coincidir 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 |
---|---|---|---|
N3346 | C++11 | No había ningún requisito para especificar si un tipo cuyos objetos pueden destruirse mediante asignadores. | Se añadió requisito. |
[editar]Véase también
InsertablePorCopia | |
InsertablePorMovimiento | |
ConstruiblePorEmplazamiento | |
Destructible |