如何为作用域枚举重载运算符 >?
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
以下代码导致运算符 >
出现不明确的重载错误:
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