编译器错误 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;
}