add_rvalue_reference (Clase)
Si es un tipo de objeto o función, crea un tipo de referencia a un valor R del parámetro de plantilla. De lo contrario, debido a la semántica de contracción de referencias, el tipo es el mismo que el parámetro de plantilla.
Sintaxis
template <class T>
struct add_rvalue_reference;
template <class T>
using add_rvalue_reference_t = typename add_rvalue_reference<T>::type;
Parámetros
T
Tipo que se va a modificar.
Comentarios
La clase add_rvalue_reference
tiene un miembro denominado type
, que es un alias para el tipo de una referencia rvalue al parámetro de plantilla T. La semántica de contracción de referencias implica que, en los tipos T que no son de objeto ni de función, T&&
es T. Por ejemplo, cuando T es un tipo de referencia lvalue, add_rvalue_reference<T>::type
es el tipo de referencia lvalue, no una referencia rvalue.
Por comodidad, <type_traits> define una plantilla del asistente, add_rvalue_reference_t
, que crea el alias del miembro type
de add_rvalue_reference
.
Ejemplo
En este ejemplo de código se usa static_assert para mostrar cómo se crean tipos de referencia a un valor R mediante add_rvalue_reference
y add_rvalue_reference_t
y cómo el resultado de add_rvalue_reference
en un tipo de referencia a un valor R no es una referencia a un valor R, sino que se contrae en el tipo de referencia a un valor L.
// ex_add_rvalue_reference.cpp
// Build by using: cl /EHsc /W4 ex_add_rvalue_reference.cpp
#include <type_traits>
#include <iostream>
#include <string>
using namespace std;
int main()
{
static_assert(is_same<add_rvalue_reference<string>::type, string&&>::value,
"Expected add_rvalue_reference_t<string> to be string&&");
static_assert(is_same<add_rvalue_reference_t<string*>, string*&&>::value,
"Expected add_rvalue_reference_t<string*> to be string*&&");
static_assert(is_same<add_rvalue_reference<string&>::type, string&>::value,
"Expected add_rvalue_reference_t<string&> to be string&");
static_assert(is_same<add_rvalue_reference_t<string&&>, string&&>::value,
"Expected add_rvalue_reference_t<string&&> to be string&&");
cout << "All static_assert tests of add_rvalue_reference passed." << endl;
return 0;
}
/*Output:
All static_assert tests of add_rvalue_reference passed.
*/
Requisitos
Encabezado: <type_traits>
Espacio de nombres: std
Consulte también
<type_traits>
Clase add_lvalue_reference
is_rvalue_reference (Clase)