从 Class 中的枚举中解析名称而无需限定

Resolving Names From an Enum Inside a Class Without Qualification

考虑以下因素:

class Class { public:
  enum Enum {
    FOO, BAR
  };
};

void routine(void) {
  int x = Class::Enum::FOO;  //Option 1

  int y = Class::FOO;        //Option 2

  using Alias = Class::Enum; //Option 3
  int z = Alias::FOO;

  using Class::Enum;         //Option 4 (line 15)
  int w = FOO;
}

选项 1 完全合格。

C++ 还允许 选项 2

选项 4 写入将失败; g++ 告诉我:

15 : error: using declaration cannot refer to class member
using Class::Enum;
~~~~~~~^
15 : note: use an alias declaration instead
using Class::Enum;
^

在它后面的 int w = FOO; 行吐之前。

我推测 g++ 的建议类似于 选项 3。不幸的是,这仍然需要资格,这是令人讨厌的。

我的问题:有没有办法通过某种方式修复 int w = FOO; 行上面的行来进行编译?如果不是,为什么不呢?如果是,请解释。

#include <iostream>

class Class { public:
    enum Enum {
        FOO, BAR
    };
};

using namespace std;

auto main() -> int
{
    int x = Class::Enum::FOO;  //Option 1
    cout << x << endl;

    int y = Class::FOO;        //Option 2
    cout << y << endl;

    using Alias = Class::Enum; //Option 3
    int z = Alias::FOO;
    cout << z << endl;

    static constexpr auto FOO = Class::FOO;         //Option 4 (line 15)
    int w = FOO;
    cout << w << endl;

    return 0;
}