Espacios de nombres
Variantes

Requisitos denominados de C++: CopyInsertable (desde C++11)

De cppreference.com
 
 
Requisitos denominados de C++
Números aleatorios
Concurrencia
(C++11)
(C++11)
Rangos
Vista multidimensional
Otros

 

Especifica que un objeto del tipo puede construirse por copia en el sitio por un asignador de memoria dado.

Requisitos

Dados los siguientes tipos, valores y expresiones:

Tipo Definición
T un tipo objeto
A un tipo asignador de memoria
X un tipo contenedor que satisface todas las siguientes condiciones:
  • X::value_type es lo mismo que T.
  • X::allocator_type es lo mismo que std::allocator_traits<A>::rebind_alloc<T>.
Valor Definición
m un l-valor de tipo A
p un puntero de tipo T*
Expresión Definición
v una expresión que denota un l-valor de tipo T / const T, o un r-valor de tipo const T
expr std::allocator_traits<A>::construct(m, p, v)

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

  • T es MoveInsertable e X.
  • expr está bien formado.
  • La evaluación de expr no cambia el valor de v.
  • Inmediatamente después de la evaluación de expr, el valor de v es equivalente a *p.


Notas

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

Si bien hasta C++23 se requería que se utilizara una implementación de construct personalizada al construir elementos de std::basic_string, todas las implementaciones solo usaban el mecanismo por defecto. El requisito se corrige mediante P1072R10 para que coincida con la práctica existente.

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
LWG 2177 C++11 la evaluación de expr no tenía ninguna condición posterior añadida
LWG 3957 C++11 v podía denotar un r-valor de tipo T excluido