我花了好一个小时找到这个问题。以下代码

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都接受该代码,因此我认为没有必要进行更详细的研究。

10-07 19:52
查看更多