Вызов защищённого конструктора в разных версиях языка
struct A {
protected:
A() {};
};
struct B : A {
B() = default;
} b{};
int main() {}
Почему этот код работает с 11 и 20 стандартом, но не работает с /std:c++17?
error C2248: 'A::A': cannot access protected member declared in class 'A'
note: see declaration of 'A::A'
note: see declaration of 'A'
Ответы (1 шт):
Автор решения: stupor
→ Ссылка
Потому что во всех 3 стандартах менялось определение аггрегата и в соответствии с этим определением менялись виды инициализации, которые проходят в данном случае. В конфигурации определений 17 стандарта выполняется аггрегатная инициализация, которая не позволяет вызвать защищённый конструктор и возникает ошибка.