编译器错误 C2429
“language feature”需要编译器标志“compiler option”
语言功能需要特定的编译器选项来支持。
从 Visual Studio 2015 Update 5 开始,如果尝试定义“复合命名空间”(包含一个或多个范围嵌套命名空间名称的命名空间),会生成错误 C2429:语言功能“nested-namespace-definition”需要编译器标志“/std:c++17”。 (在 Visual Studio 2017 版本 15.3 中,需要 /std:c++latest
开关。)在 C++17 之前,C++ 不允许使用复合命名空间定义。 指定 /std:c++17
编译器选项时,编译器支持复合命名空间定义:
// C2429a.cpp
namespace a::b { int i; } // C2429 starting in Visual Studio 2015 Update 3.
// Use /std:c++17 to fix, or do this:
// namespace a { namespace b { int i; }}
int main() {
a::b::i = 2;
}