如何确保 Visual C++ 不允许作用域枚举访问?



我有一个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::EnumValueClassName::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 及以上功能。

最新更新