Spec-Zone.ru › C++

std::is_integral

Определено в заголовке <type_traits>
template< class T >
struct is_integral;
(начиная с C++11)

std::is_integral — это унарный типовой признак.

Проверяет, является ли T целочисленным типом. Предоставляет константу-член value, равную true, если T имеет тип bool, char, char8_t(начиная с C++20), char16_t, char32_t, wchar_t, short, int, long, longlong или любой из определяемых реализацией расширенных целочисленных типов, включая варианты со знаковыми и беззнаковыми модификаторами, а также варианты с квалификаторами cv. В противном случае value равно false.

Если программа добавляет специализации для std::is_integral или std::is_integral_v, поведение не определено.

Параметры шаблона

T - тип для проверки

Вспомогательный шаблон переменной

template< class T >
constexpr bool is_integral_v = is_integral<T>::value;
(начиная с C++17)

Унаследовано от std::integral_constant

Константы-члены

value
[статическая]
true, если T является целочисленным типом, false в противном случае
(общедоступная статическая константа-член)

Функции-члены

operator bool
преобразует объект в bool, возвращает value
(общедоступная функция-член)
operator()
(C++14)
возвращает value
(общедоступная функция-член)

Типы-члены

Тип Определение
value_type bool
type std::integral_constant<bool,value>

Возможная реализация

// Note: this implementation uses C++20 facilities
template<class T>
struct is_integral : std::bool_constant<
    requires (T t, T* p, void (*f)(T)) // T* parameter excludes reference types
    {
        reinterpret_cast<T>(t); // Exclude class types
        f(0); // Exclude enumeration types
        p + t; // Exclude everything not yet excluded but integral types
    }> {};

Пример

#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); // bit-field's type
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, "Integral required.");
    return i;
}
static_assert(same('"') == 042);

int main() {}

См. также

integral
(C++20)
задаёт ограничение, согласно которому тип является целочисленным
(концепт)
is_integer
[статическая]
определяет целочисленные типы
(общедоступная статическая константа-член std::numeric_limits<T>)
is_floating_point
(C++11)
проверяет, является ли тип типом с плавающей точкой
(шаблон класса)
is_arithmetic
(C++11)
проверяет, является ли тип арифметическим типом
(шаблон класса)
is_enum
(C++11)
проверяет, является ли тип перечислимым типом
(шаблон класса)
is_integral_type
(C++26)
проверяет, является ли отражённый тип целочисленным
(функция)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/types/is_integral

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API