如何重载运算符> for scoped enum?

时间:2016-02-17 09:59:35

标签: c++ enums operators

以下代码导致操作符>出现模糊的重载错误:

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;

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

1 个答案:

答案 0 :(得分:0)

我可以使用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