c++enumsoperators

How do I overload operator > for scoped enum?


The following code causes an ambiguous overload error for operator >:

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;

Can I overload operator > for scoped enums? If so, what am I doing wrong?


Solution

  • I could reproduce the error with VS2015. Yet I don't see why you create a custom operator and not use the build in one:

    #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;
    }
    

    The code also compiles with GCC 4.9.2 (C++14)