我有一个C++代码库,它是使用各种版本的GCC和Visual Studio(2017(编译的。 我们的一些程序员(具有 C# 背景(倾向于完全限定枚举的名称(例如ClassName::EnumName::EnumValue
与正确的ClassName::EnumValue
(。 Visual Studio似乎可以接受这种用法(即使枚举没有定义为enum class
,根据C++11(,但是GCC(正确(错误。
在这种情况下,我该怎么做才能使Visual Studio给出类似于GCC的错误?
编辑:我应该注意,我们需要的GCC版本往往很旧(6.1之前(
您将无法使 MSVS 导致编译器错误。 随着作用域枚举的引入,使用枚举名称引用非作用域枚举变得合法。 这意味着ClassName::EnumName::EnumValue
和ClassName::EnumValue
在C++11及以上都是合法的。
MSVC 2017 仅支持/std:[c++14|c++17|c++latest]
因为它是编译C++标准,因此ClassName::EnumName::EnumValue
始终是合法的。
如果您不打算使用其他编译器针对 C++14 进行编译,这可能会导致更多问题,因为 MSVS 人员可能会使用在 C++98/03/11 中无法编译的其他 C++14 及以上功能。