Namespaces
Variants

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

From cppreference.net
C++ named requirements

Especifica que un objeto del tipo puede ser construido por defecto in-situ por un asignador 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 > :: construct ( m, p ) está bien formada, T es DefaultInsertable en X .

Notas

Por defecto, esto inicializará por valor el objeto, como mediante :: new ( ( void * ) p ) T ( ) (hasta C++20) std:: construct_at ( p ) (desde C++20) .

Si la inicialización por valor no es deseable, por ejemplo, si el objeto es de tipo no-clase y no se necesita poner a cero, puede evitarse proporcionando un personalizado Allocator::construct .

Aunque se requería que se utilizara un construct personalizado al construir elementos de std::basic_string hasta C++23, todas las implementaciones solo utilizaron el mecanismo predeterminado. El requisito se corrigió mediante P1072R10 para ajustarse a la práctica existente.

Informes de defectos

Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a estándares publicados anteriormente de C++.

DR Aplicado a Comportamiento publicado Comportamiento correcto
N3346 C++11 los requisitos CopyInsertable y MoveInsertable
están presentes, pero DefaultInsertable faltaba
se añadió el requisito

Véase también

DefaultConstructible
CopyInsertable
MoveInsertable
EmplaceConstructible
Erasable