考虑以下根据标准格式错误的程序
union Test {
int s{3};
float f;
Test() {}
Test(float f) : f(f) {} // this should be error
};
int main() {
}
C++11 标准N3376第 12 条第 6.2.8 节说(强调我的):
尝试初始化联合的多个非静态数据成员会导致程序格式错误。
但是所有流行的 3 种编译器(g++、clang++、MSVC++)都可以编译上述程序,而不会产生任何编译器错误或警告。我认为编译器有必要在这个程序中给出诊断并且程序应该在编译中失败。
在此处查看在 g++ 上测试的现场演示。
在此处查看在 clang++ 上测试的现场演示。
所有的编译器都按照标准破坏了吗?这是编译器错误吗?