Вызов защищённого конструктора в разных версиях языка

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 стандарта выполняется аггрегатная инициализация, которая не позволяет вызвать защищённый конструктор и возникает ошибка.

→ Ссылка