decay-copy
|
template
<
class
T
>
typename std:: decay < T > :: type decay - copy ( T && value ) ; |
(desde C++11)
(hasta C++20) ( solo para exposición* ) |
|
|
template
<
class
T
>
requires
std::
convertible_to
<
T,
std::
decay_t
<
T
>>
|
(desde C++20)
( solo para exposición* ) |
|
Retorna std:: forward < T > ( value ) (convertido implícitamente al tipo decayed), una copia decayed prvalue de value .
Contenidos |
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) |