Класс 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