如何为作用域枚举重载运算符 >?

How do I overload operator > for scoped enum?

以下代码导致运算符 > 出现不明确的重载错误:

enum class MyEnum {first, second};
bool operator > (MyEnum lhs, MyEnum rhs)
{
   return static_cast<uint32_t>(lhs) > static_cast<uint32_t>(rhs);
}
MyEnum e1, e2;
auto result = e1 > e2;

我可以为作用域枚举重载运算符 > 吗?如果是这样,我做错了什么?

我可以用 VS2015 重现错误。但是我不明白为什么您创建自定义运算符而不使用其中的构建:

#include <iostream>
using namespace std;

enum class MyEnum { first, second };
//bool operator > (MyEnum lhs, MyEnum rhs)
//{
//  return static_cast<uint32_t>(lhs) > static_cast<uint32_t>(rhs);
//}

int main()
{
    MyEnum e1 = MyEnum::first, e2 = MyEnum::second;
    auto result = e1 > e2;
}

该代码还可以使用 GCC 4.9.2 (C++14) 进行编译:http://goo.gl/kpRp1v