Namespaces
Variants

C++ named requirements: Erasable (since C++11)

From cppreference.net
C++ named requirements

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