std::remove_reference
De cppreference.com
Definido en el archivo de encabezado <type_traits> | ||
template<class T > struct remove_reference; | (desde C++11) | |
Si el tipo T
tipo referencia, proporciona el miembro typedef type
, que es el tipo al que hace referencia T
. De lo contrario type
es T
.
El comportamiento de un programa que añade especializaciones para remove_reference
no está definido.
Contenido |
[editar]Tipos miembro
Nombre | Definición |
type | El tipo al que hace referencia T o T si no es una referencia. |
[editar]Tipos auxiliares
template<class T > using remove_reference_t =typename remove_reference<T>::type; | (desde C++14) | |
[editar]Posible implementación
template<class T >struct remove_reference {typedef T type;};template<class T >struct remove_reference<T&>{typedef T type;};template<class T >struct remove_reference<T&&>{typedef T type;}; |
[editar]Ejemplo
Ejecuta este código
#include <iostream> // std::cout#include <type_traits> // std::is_same template<class T1, class T2>void print_is_same(){std::cout<<std::is_same<T1, T2>()<<'\n';} int main(){std::cout<<std::boolalpha; print_is_same<int, int>(); print_is_same<int, int&>(); print_is_same<int, int&&>(); print_is_same<int, std::remove_reference<int>::type>(); print_is_same<int, std::remove_reference<int&>::type>(); print_is_same<int, std::remove_reference<int&&>::type>();}
Salida:
true false false true true true
[editar]Véase también
(C++11) | Comprueba si un tipo es o bien una referencia lvalue o una referencia rvalue (plantilla de clase) |
(C++11)(C++11) | Añade referencia lvalue o rvalue al tipo dado. (plantilla de clase) |
(C++20) | Combina std::remove_cv y std::remove_reference. (plantilla de clase) |