Namespaces
Variants

std:: is_integral

From cppreference.net
Metaprogramming library
Type traits
Type categories
(C++11)
(C++11) ( DR* )
(C++11)
(C++11)
is_integral
(C++11)
Type properties
(C++11)
(C++11)
(C++14)
(C++11) (deprecated in C++26)
(C++11) ( until C++20* )
(C++11) (deprecated in C++20)
(C++11)
Type trait constants
Metafunctions
(C++17)
Supported operations
Relationships and property queries
Type modifications
Type transformations
(C++11) (deprecated in C++23)
(C++11) (deprecated in C++23)
(C++11)
(C++11) ( until C++20* ) (C++17)

Compile-time rational arithmetic
Compile-time integer sequences
Definido en el encabezado <type_traits>
template < class T >
struct is_integral ;
(desde C++11)

std::is_integral es un UnaryTypeTrait .

Comprueba si T es un tipo integral . Proporciona la constante miembro value que es igual a true , si T es el tipo bool , char , char8_t (desde C++20) , char16_t , char32_t , wchar_t , short , int , long , long long , o cualquier tipo de entero extendido definido por la implementación, incluyendo todas las variantes con signo, sin signo y con calificadores cv. De lo contrario, value es igual a false .

Si el programa añade especializaciones para std::is_integral o std::is_integral_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_integral_v = is_integral < T > :: value ;
(desde C++17)

Heredado de std:: integral_constant

Constantes miembro

value
[static]
true si T es un tipo integral, 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

// Nota: esta implementación utiliza facilidades de C++20
template<class T>
struct is_integral : std::bool_constant<
    requires (T t, T* p, void (*f)(T)) // El parámetro T* excluye tipos referencia
    {
        reinterpret_cast<T>(t); // Excluye tipos clase
        f(0); // Excluye tipos enumeración
        p + t; // Excluye todo lo no excluido aún excepto tipos integrales
    }> {};

Ejemplo

#include <type_traits>
static_assert
(
    std::is_integral_v<float> == false &&
    std::is_integral_v<int*> == false &&
    std::is_integral_v<int> == true &&
    std::is_integral_v<const int> == true &&
    std::is_integral_v<bool> == true &&
    std::is_integral_v<char> == true
);
class A {};
static_assert(std::is_integral_v<A> == false);
struct B { int x:4; };
static_assert(std::is_integral_v<B> == false);
using BF = decltype(B::x); // tipo del campo de bits
static_assert(std::is_integral_v<BF> == true);
enum E : int {};
static_assert(std::is_integral_v<E> == false);
template <class T>
constexpr T same(T i)
{
    static_assert(std::is_integral<T>::value, "Se requiere tipo integral.");
    return i;
}
static_assert(same('"') == 042);
int main() {}

Véase también

(C++20)
especifica que un tipo es un tipo integral
(concept)
[static]
identifica tipos enteros
(constante de miembro estático público de std::numeric_limits<T> )
verifica si un tipo es un tipo de punto flotante
(plantilla de clase)
verifica si un tipo es un tipo aritmético
(plantilla de clase)
(C++11)
verifica si un tipo es un tipo de enumeración
(plantilla de clase)