Ответ 1
POD
означает обычный тип данных, который по определению не может иметь определяемый пользователем конструктор.
POD на самом деле является совокупным типом (см. следующую цитату). Итак, что такое совокупность? Стандарт С++ говорит в разделе §8.5.1/1,
Агрегат - это массив или класс (раздел 9) с не объявленным пользователем конструкторы (12.1), нет личных или защищенные нестатические элементы данных (пункт 11), нет базовых классов (пункт 10) и нет виртуальных функций (10.3).
И в разделе § 9/4 из С++ Standard говорится:
[....] POD-struct агрегатный класс, который не имеет нестатических данных члены типа non-POD-struct, не-POD-union (или массив таких типов) или ссылка, и имеет не определенную пользователем оператор присваивания копий и нет определяемый пользователем деструктор. Аналогичным образом, POD-union - совокупный союз, который не имеет нестатических элементов данных типа не-POD-структура, не-POD-объединение (или массив таких типов) или ссылку, и имеет не заданное пользователем назначение копирования оператор и не определен пользователем. деструктор. Класс POD - это класс это либо POD-структура, либо POD-союз.
Из этого также ясно, что класс POD/struct/union, хотя не может иметь пользовательский оператор присваивания и определяемый пользователем деструктор.
Существуют, однако, и другие типы POD. В разделе §3.9/10 говорится:
Арифметические типы (3.9.1), типы перечислений, типы указателей и указатель на типы членов (3.9.2) и cv-квалифицированные версии этих типов (3.9.3) совокупно называются скалярными типы. Скалярные типы, типы POD-структуры, POD-union (раздел 9), массивы такие типы и cv-квалифицированные версии этих типов (3.9.3) являются совместно называемые типы POD.
Прочтите этот FAQ: Что такое "тип POD" ?