Рассмотрим следующий фрагмент кода:
struct Foo {
void* p;
Foo() : p{(class Bar*)0} {}
};
Bar* bar;
Последние версии GCC (8.2) и Clang (7.0.0) не могут его скомпилировать. То же самое делает ICC (19.0.1).
Однако MSVC (v19.16) компилирует его чисто.
Ошибка от GCC: error: 'Bar' does not name a type; did you mean 'char'?
error: 'Bar' does not name a type; did you mean 'char'?
Clang и ICC выдают похожие сообщения.
Просмотрщик соответствия для всех четырех компиляторов в Godbolt.
Итак, какой из компиляторов верен в соответствии со стандартом?