Пространства имён
Варианты
Действия

std::is_fundamental

Материал из cppreference.com
< cpp‎ | types
 
 
Библиотека метапрограммирования
Свойства типов
Категории типов
(C++11)
(C++14)  
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
is_fundamental
(C++11)
Свойства типов
(C++11)
(C++11)
(C++14)
(C++11)
(C++11)(до C++20*)
(C++11)(устарело в C++20)
(C++11)
Константы свойств типа
Метафункции
(C++17)
Поддерживаемые операции
Запросы отношений и свойств
Модификации типов
(C++11)(C++11)(C++11)
Преобразования типов
(C++11)(устарело в C++23)
(C++11)(устарело в C++23)
(C++11)
(C++11)
(C++17)

(C++11)(до C++20*)(C++17)
Рациональная арифметика времени компиляции
Целочисленные последовательности времени компиляции
 
Определено в заголовочном файле <type_traits>
template< class T >
struct is_fundamental;
(начиная с C++11)

std::is_fundamental является UnaryTypeTrait.

Если T является фундаментальным типом (то есть арифметическим типом, void или nullptr_t), предоставляет элемент константу value равной true. Для любого другого типа value равна false.

Поведение программы, добавляющей специализации для std::is_fundamental или std::is_fundamental_v (начиная с C++17) не определено.

Содержание

[править] Параметры шаблона

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

[править] Шаблон вспомогательной переменной

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

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

Константы элементы

value
[static]
true, если T является фундаментальным типом, false иначе
(public static константа-элемент)

Функции-элементы

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

Типы элементы

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

[править] Возможная реализация

template< class T >
struct is_fundamental
  : std::integral_constant<
        bool,
        std::is_arithmetic<T>::value ||
        std::is_void<T>::value  ||
        std::is_same<std::nullptr_t, typename std::remove_cv<T>::type>::value
        // в C++14 вы также можете использовать вместо этого
        // 'std::is_null_pointer<T>::value'
> {};

[править] Пример

#include <type_traits>
 
static_assert(std::is_fundamental_v<int> == true);
static_assert(std::is_fundamental_v<int&> == false);
static_assert(std::is_fundamental_v<int*> == false);
static_assert(std::is_fundamental_v<void> == true);
static_assert(std::is_fundamental_v<void*> == false);
static_assert(std::is_fundamental_v<float> == true);
static_assert(std::is_fundamental_v<float&> == false);
static_assert(std::is_fundamental_v<float*> == false);
static_assert(std::is_fundamental_v<std::nullptr_t> == true);
static_assert(std::is_fundamental_v<std::is_fundamental<int>> == false);
 
class A {};
static_assert(std::is_fundamental_v<A> == false);
static_assert(std::is_fundamental_v<std::is_fundamental<A>::value_type>);
 
int main() {}

[править] Смотрите также

проверяет, является ли тип составным типом
(шаблон класса) [править]
проверяет, является ли тип арифметическим типом
(шаблон класса) [править]
(C++11)
проверяет, является ли тип void
(шаблон класса) [править]
проверяет, является ли тип std::nullptr_t
(шаблон класса) [править]