Класс is_pod

Проверяет, является ли тип типом POD.

Синтаксис

template <class T>
struct is_pod;

Параметры

T
Запрашиваемый тип.

Замечания

is_pod<T>::value — это true, если тип T — POD. В противном случае — false.

К типам POD относятся арифметические типы, типы перечисления, типы указателей и указатели на типы-члены.

Квалифицированная версия типа POD также обладает типом POD.

Массив данных типа POD также имеет тип POD.

Структура или объединение, все нестатические данные-члены которого имеют типа POD, также обладает типом POD при соблюдении следующих условий:

  • Нет объявленных пользователем конструкторов.

  • Нет закрытых или защищенных нестатических данных-членов.

  • Отсутствие базовых классов.

  • Нет виртуальных функций.

  • Нет нестатических данных-членов ссылочного типа.

  • Нет определяемого пользователем оператора присвоения копирования.

  • Нет определяемого пользователем деструктора.

Таким образом, можно рекурсивно создавать структуры POD и массивы, содержащие структуры и массивы POD.

Пример

// std__type_traits__is_pod.cpp
// compile with: /EHsc
#include <type_traits>
#include <iostream>

struct trivial {
    int val;
};

struct throws {
    throws() {}  // User-declared ctor, so not POD

    int val;
};

int main() {
    std::cout << "is_pod<trivial> == " << std::boolalpha
        << std::is_pod<trivial>::value << std::endl;
    std::cout << "is_pod<int> == " << std::boolalpha
        << std::is_pod<int>::value << std::endl;
    std::cout << "is_pod<throws> == " << std::boolalpha
        << std::is_pod<throws>::value << std::endl;

    return (0);
}
is_pod<trivial> == true
is_pod<int> == true
is_pod<throws> == false

Требования

Заголовок:<type_traits>

Пространство имен: std

См. также

<type_traits>