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?
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)