Почему конструктор по умолчанию для структуры A считается нетривиальным?
Поскольку он объявлен пользователем.
Примеры классов, имеющих тривиальный конструктор:
struct Trivial {
int val;
};
struct Trivial2 {
int val;
Trivial2() = default;
};
В качестве бонуса, это нетривиально:
struct NonTrivial {
int val;
NonTrivial();
};
NonTrivial::NonTrivial = default;
Если вы хотите, чтобы A::val
было инициализировано нулями, вы захотитедобавить инициализатор члена по умолчанию в объединение:
union B {
A a = {};
};