我花了好一个小时找到这个问题。以下代码
class Test {
public:
void method();
int _member;
};
void Test::method()
{
struct S {
int s = 0; // same with int s {0};
};
_member;
}
int main(int argc, const char* argv [])
{
return 0;
}
产生编译错误:
当我用
int s = 0;
替换int s;
时,错误就消失了。这只会在MSVC 2013中发生,而不是在2015年中发生。我很确定这是一个编译器错误,但是我想确保它不是我不熟悉的某些C++特性(在C++ 11和C++之间有所改变) 14)。
最佳答案
[C++11: 12.6.2]
在C++ 11中定义了NSDMI,并且本节和文档中的任何其他节都没有定义这种语法约束。因此,它必须是一个实现错误。
而且,由于GCC,Clang和Visual Studio 2015都接受该代码,因此我认为没有必要进行更详细的研究。