Espacios de nombres
Variantes
Acciones

std::is_same

De cppreference.com
< cpp‎ | types
 
 
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)
 
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.

Contenido

[editar] Plantilla de variable auxiliar

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>

[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ó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

[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]