Как объяснить разницу, когда я компилирую версии #if 0
и #if 1
следующего кода:
#include <cstdlib>
struct A
{
explicit A() = default; // explicitly defaulted or deleted constructors are allowed for aggregates (since C++11)
#if 1
private :
#endif
int i;
};
int
main()
{
A a = {};
return EXIT_SUCCESS;
}
- для
#if 0
все в порядке, компиляция успешна. - для
#if 1
сбой компиляции с сообщением об ошибке:ошибка: выбранный конструктор явственен при копировании-инициализации
В чем разница для выражения A a = {};
в зависимости от того, является ли A
аггрегатом или нет?