Namespaces
Variants

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

From cppreference.net
C++ named requirements

Especifica que un objeto del tipo puede ser construido por copia in-situ por un asignador dado.

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*
Expresión Definición
v una expresión que denota un lvalue de tipo T / const T , o un rvalue de tipo const T
expr std:: allocator_traits < A > :: construct ( m, p, v )

T es CopyInsertable en X si se cumplen todas las siguientes condiciones:

  • T es MoveInsertable en X .
  • expr está bien formado.
  • Evaluar expr no cambia el valor de v .
  • Inmediatamente después de evaluar expr , el valor de v es equivalente a * p .

Notas

Si A es std:: allocator < T > , entonces esto llamará a placement new , como por :: new ( ( void * ) p ) T ( v ) (hasta C++20) std:: construct_at ( p, v ) (desde C++20) .

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 los estándares publicados anteriormente de C++.

DR Aplicado a Comportamiento publicado Comportamiento correcto
LWG 2177 C++11 evaluar expr no tenía ninguna postcondición añadida
LWG 3957 C++11 v podría denotar un rvalue de tipo T excluido