Я столкнулся со странной проблемой при попытке перейти на С++ 17. Проблема в том, что кое-что (и я не уверен, что) изменилось в С++ 17, что заставило инициализацию списка работать по-другому в случае конструктора по умолчанию. Я пытался найти https://en.cppreference.com/w/cpp/language/list_initialization для получения дополнительной информации, но я не нашел ничего, что выглядит уместным.
Кто-нибудь знает причину, по которой код ниже компилируется в С++ 14, но не в С++ 17 при вызове B{}
вместо B()
? (Я попробовал это и в gcc 8.2 и 7.3 и в icc 19)
struct A{
protected:
A() {}
};
struct B : public A {};
B f(){
return B(); //compilation OK
//return B{}; //compilation error
}