std:: is_integral
|
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>
)
|
|
(C++11)
|
verifica si un tipo es un tipo de punto flotante
(plantilla de clase) |
|
(C++11)
|
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) |