decay-copy
template< class T >
typename std::decay<T>::type /*decay-copy*/( T&& value );
|
(desde C++11) (hasta C++20) (solo expositivo*) |
|
template< class T >
requires std::convertible_to<T, std::decay_t<T>>
constexpr std::decay_t<T> /*decay-copy*/( T&& value )
noexcept(std::is_nothrow_convertible_v<T, std::decay_t<T>>);
|
(desde C++20) (solo expositivo*) |
|
Devuelve std::forward<T>(value) (convertido implícitamente al tipo decaído), una copia prvalue decaída de value.
Parámetros
| value | - | el valor a ser copiado |
Valor de retorno
Una copia descompuesta de value como un prvalue.
Notas
decay-copy
fue introducido por la resolución de
LWG issue 929
. Inicialmente se utiliza en la
biblioteca de soporte de concurrencia
para garantizar que los argumentos se degraden al pasar por valor, y posteriormente se utiliza en la
biblioteca de rangos
.
La característica del lenguaje
auto
(
x
)
introducida en C++23 también permite crear copias degradadas como prvalues. La única diferencia es que
decay-copy
siempre
materializa
value
y produce una copia, mientras que
auto
(
expr
)
es una operación nula si
expr
es un prvalue.
Todos los usos de
decay-copy
en la biblioteca estándar (ver abajo) excepto
views::all
,
ranges::take_view
y
ranges::drop_view
son reemplazados con
auto
(
x
)
desde C++23.
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 3724 | C++20 |
decay-copy
no estaba restringido
|
restringido |
Véase también
construye un nuevo objeto
thread
(función miembro pública de
std::thread
)
|
|
construye un nuevo objeto
jthread
(función miembro pública de
std::jthread
)
|
|
|
(C++11)
|
ejecuta una función asíncronamente (potencialmente en un nuevo hilo) y devuelve un
std::future
que contendrá el resultado
(plantilla de función) |
|
(C++20)
|
devuelve un iterador al inicio de un rango
(objeto de punto de personalización) |
|
(C++20)
|
devuelve un centinela que indica el final de un rango
(objeto de punto de personalización) |
|
(C++20)
|
devuelve un iterador inverso a un rango
(objeto de punto de personalización) |
|
(C++20)
|
devuelve un iterador inverso final a un rango
(objeto de punto de personalización) |
|
(C++20)
|
devuelve un entero igual al tamaño de un rango
(objeto de punto de personalización) |
|
(C++20)
|
obtiene un puntero al inicio de un rango contiguo
(objeto de punto de personalización) |
|
(C++20)
|
una
view
que incluye todos los elementos de un
range
(plantilla de alias) (objeto adaptador de rango) |
|
(C++20)
|
una
view
que consiste en los primeros N elementos de otra
view
(plantilla de clase) (objeto adaptador de rango) |
|
(C++20)
|
una
view
que consiste en elementos de otra
view
, omitiendo los primeros N elementos
(plantilla de clase) (objeto adaptador de rango) |