std:: is_reference
From es.cppreference.net
|
Definido en el encabezado
<type_traits>
|
||
|
template
<
class
T
>
struct is_reference ; |
(desde C++11) | |
std::is_reference
es un
UnaryTypeTrait
.
Si
T
es un tipo referencia (referencia a lvalue o referencia a rvalue), proporciona la constante miembro
value
igual a
true
. Para cualquier otro tipo,
value
es
false
.
Si el programa añade especializaciones para
std::is_reference
o
std::is_reference_v
, el comportamiento es indefinido.
Contenidos |
Parámetros de plantilla
| T | - | un tipo a verificar |
Plantilla de variable auxiliar
|
template
<
class
T
>
constexpr bool is_reference_v = is_reference < T > :: value ; |
(desde C++17) | |
Heredado de std:: integral_constant
Constantes miembro
|
value
[static]
|
true
si
T
es un tipo referencia,
false
en caso contrario
(constante miembro pública estática) |
Funciones miembro
|
operator bool
|
convierte el objeto a
bool
, devuelve
value
(función miembro pública) |
|
operator()
(C++14)
|
devuelve
value
(función miembro pública) |
Tipos miembro
| Tipo | Definición |
value_type
|
bool |
type
|
std:: integral_constant < bool , value > |
Implementación posible
template<class T> struct is_reference : std::false_type {}; template<class T> struct is_reference<T&> : std::true_type {}; template<class T> struct is_reference<T&&> : std::true_type {}; |
` no ha sido traducido, como se solicitó. Solo se ha traducido el texto circundante (esta nota explicativa).
Ejemplo
Ejecutar este código
#include <iostream> #include <type_traits> class A {}; int main() { # define REF(x) << #x " ?: " << x << '\n' std::cout << std::boolalpha REF(std::is_reference_v<A>) REF(std::is_reference_v<A&>) REF(std::is_reference_v<A&&>) REF(std::is_reference_v<long>) REF(std::is_reference_v<long&>) REF(std::is_reference_v<long&&>) REF(std::is_reference_v<double*>) REF(std::is_reference_v<double*&>) REF(std::is_reference_v<double*&&>); # undef REF }
Salida:
std::is_reference_v<A> ?: false std::is_reference_v<A&> ?: true std::is_reference_v<A&&> ?: true std::is_reference_v<long> ?: false std::is_reference_v<long&> ?: true std::is_reference_v<long&&> ?: true std::is_reference_v<double*> ?: false std::is_reference_v<double*&> ?: true std::is_reference_v<double*&&> ?: true
Véase también
|
(C++11)
|
comprueba si un tipo es una
referencia lvalue
(plantilla de clase) |
|
(C++11)
|
comprueba si un tipo es una
referencia rvalue
(plantilla de clase) |