В C ++ 03 это определенно , а не POD. Согласно §9 / 4, «A POD-struct является агрегатным классом ...», а согласно §8.5.1 / 1:
агрегат - это массив или класс (раздел 9) без объявленных пользователем конструкторов (12.1), без закрытых или защищенных нестатических членов данных (пункт 11), без базовых классов (пункт 10) и никаких виртуальных функций (10.3). "
Под C ++ 0x, по крайней мере, начиная с N3090 / 3092, я считаю, что - это POD. Это требует только того, чтобы все нестатические члены имели одинаковый доступ, но не обязательно, чтобы этот доступ был публичным Это необходимо для устранения проблемы, на которую, я полагаю, я первым указал - в C ++ 98/03 спецификатор пустого доступа приводит к проблеме:
struct x {
int a;
public:
int b;
public:
int c;
};
Это соответствует требованиям структуры POD - но стандарт по-прежнему разрешает менять относительные позиции b
и c
из-за промежуточного спецификатора доступа. В результате, наличие структуры POD не обеспечивает гарантий компоновки, которые были предназначены для обеспечения совместимости со структурами C (для очевидного примера).