Я обнаружил, что возможность использования синтаксиса списка инициализаторов для класса зависит от того, имеют ли поля класса значения по умолчанию. Почему?
Чтобы быть точным, рассмотрим следующий код:
class S
{
public:
int a;
};
...
int a;
S s{ a };
Он компилируется без каких-либо проблем. Но если я добавлю значение по умолчанию в поле класса, он перестанет строить:
class S
{
public:
int a = 0;
};
...
int a;
S s{ a };
Ошибка 1 ошибка C2440: 'initializing': не может преобразовать из 'initializer-list' в 'S'
Почему? Что еще влияет на создание такого конструктора?