Espacios de nombres
Variantes
Acciones

std::is_same

De cppreference.com
< cpp‎ | types
 
 
Biblioteca de servicios
 
Apoyo de tipos
Propiedades de tipos
(C++11)
(C++11)
(C++14)
(C++11)
(C++11)(hasta C++20)
(C++11)(en desuso en C++20)
(C++11)
Constantes de rasgos de tipos
Metafunciones
(C++17)
Contexto de evaluación constante
Operaciones soportadas
Relaciones y consultas de propiedades
Modificaciones de tipos
Transformaciones de tipos
(C++11)
(C++11)
(C++17)
(C++11)(hasta C++20)(C++17)
 
Definido en el archivo de encabezado <type_traits>
template<class T, class U >
struct is_same;
(desde C++11)

Si T y U denominan el mismo tipo (tomando en cuenta las calificaciones const/volatile), proporciona la constante miembro value igual a true. De lo contrario, value es false.

Se satisface la conmutatividad, es decir, para dos tipos cualesquiera T y U, is_same<T, U>::value==true si y solo si is_same<U, T>::value==true.

El comportamiento de un programa que añade especializaciones para is_sameo is_same_v(desde C++17) no está definido.

Contenido

[editar]Plantilla de variable auxiliar

template<class T, class U >
inlineconstexprbool is_same_v = is_same<T, U>::value;
(desde C++17)

Heredado de std::integral_constant

Constantes miembro

value
[estático]
true si T y U son el mismo tipo , de lo contrario false.
(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_typebool
typestd::integral_constant<bool, value>

[editar]Posible implementación

template<class T, class U>struct is_same :std::false_type{};   template<class T>struct is_same<T, T>:std::true_type{};

[editar]Ejemplo

#include <iostream>#include <type_traits>#include <cstdint>   void print_separator(){std::cout<<"-----\n";}   int main(){std::cout<<std::boolalpha;   // algunos hechos definidos por la implementaciónstd::cout<< std::is_same<int, std::int32_t>::value<<'\n';// habitualmente verdadero si 'int' es 32 bitstd::cout<< std::is_same<int, std::int64_t>::value<<'\n';// posiblemente verdadero si se usa el modelo de datosILP64   print_separator();   // 'float' nunca es un tipo enterostd::cout<< std::is_same<float, std::int32_t>::value<<'\n';// falso   print_separator();   // 'int' es implícitamente 'signed'std::cout<< std::is_same<int, int>::value<<"\n";// verdaderostd::cout<< std::is_same<int, unsignedint>::value<<"\n";// falsostd::cout<< std::is_same<int, signedint>::value<<"\n";// verdadero   print_separator();   // a diferencia de otros tipos, 'char' no es ni 'unsigned' ni 'signed'std::cout<< std::is_same<char, char>::value<<"\n";// verdaderostd::cout<< std::is_same<char, unsignedchar>::value<<"\n";// falsostd::cout<< std::is_same<char, signedchar>::value<<"\n";// falso}

Posible salida:

true false ----- false ----- true false true ----- true false false

[editar]Véase también

Comprueba si un tipo T es entero.
(plantilla de clase)[editar]
Hace al tipo entero dado con signo
(plantilla de clase)[editar]
Hace al tipo entero dado sin signo
(plantilla de clase)[editar]
close