Espacios de nombres
Variantes

std::is_same

De cppreference.com
 
 
Biblioteca de servicios
 
Apoyo de tipos
Tipos básicos
Tipos fundamentales
Tipos enteros de anchura fija (C++11)
Límites numéricos
Interfaz de C de límites numéricos
Información de tipo
en tiempo de ejecución
Rasgos de tipos
Categorías de tipos
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
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
(C++11)(C++11)(C++11)
Transformaciones de tipos
(C++11)
(C++11)
(C++17)
(C++11)(hasta C++20)(C++17)
 
<tbody> </tbody>
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_same o is_same_v (desde C++17) no está definido.

Plantilla de variable auxiliar

<tbody> </tbody>
template< class T, class U > inline constexpr bool 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_type bool
type std::integral_constant<bool, value>

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 {};

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ón
    std::cout << std::is_same<int, std::int32_t>::value << '\n';
    // habitualmente verdadero si 'int' es 32 bit
    std::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 entero
    std::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";          // verdadero
    std::cout << std::is_same<int, unsigned int>::value << "\n"; // falso
    std::cout << std::is_same<int, signed int>::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";          // verdadero
    std::cout << std::is_same<char, unsigned char>::value << "\n"; // falso
    std::cout << std::is_same<char, signed char>::value << "\n";   // falso
}

Posible salida:

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

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]