Речь идет о std::is_pod
, который определяет, является ли шаблон простым старым типом данных или нет.
Смотрите следующий код:
struct A {
public:
int m1;
int m2;
};
struct B {
public:
int m1;
private:
int m2;
};
struct C {
private:
int m1;
int m2;
};
int main()
{
std::cout << std::boolalpha;
std::cout << std::is_pod<A>::value << '\n'; // true
std::cout << std::is_pod<B>::value << '\n'; // false
std::cout << std::is_pod<C>::value << '\n'; // true
}
Все три структуры выглядят как POD для меня. Но, очевидно, struct B
нет.
Я не понимаю, почему. Для меня все они имеют тривиальный конструктор, оператор перемещения и копирования. Деструктор тоже является тривиальным.
Я обвиняю его в использовании 2 спецификаторов доступа, но я не могу найти информацию об этом.