Namespaces
Variants

decay-copy

From cppreference.net
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 >>
constexpr std:: decay_t < T > decay - copy ( T && value )

noexcept ( std:: is_nothrow_convertible_v < 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)
devuelve un iterador al inicio de un rango
(objeto de punto de personalización)
devuelve un centinela que indica el final de un rango
(objeto de punto de personalización)
devuelve un iterador inverso a un rango
(objeto de punto de personalización)
devuelve un iterador inverso final a un rango
(objeto de punto de personalización)
devuelve un entero igual al tamaño de un rango
(objeto de punto de personalización)
obtiene un puntero al inicio de un rango contiguo
(objeto de punto de personalización)
una view que incluye todos los elementos de un range
(plantilla de alias) (objeto adaptador de rango)
una view que consiste en los primeros N elementos de otra view
(plantilla de clase) (objeto adaptador de rango)
una view que consiste en elementos de otra view , omitiendo los primeros N elementos
(plantilla de clase) (objeto adaptador de rango)