在下面的代码中,重载的
我的理解是,
f(int)
被选择而不是f(unsigned)
。在clang 3.0和gcc 4.8测试通过。enum E
{
};
E f(int);
int f(unsigned);
E e = f(E(0));
我的理解是,
enum -> int
和enum -> unsigned
都是标准的转换序列,它们只包含整数转换。根据[conv.integral],枚举类型的rvalue可以转换为整数类型的rvalue。根据[over.best.ics],仅包含整数转换的标准转换序列的等级为“Conversion”。根据[over.ics.rank],除非适用以下规则之一,否则无法区分两个相同形式的隐式转换序列:[...]。在比较这两个标准转换序列时,似乎没有适用的规则。我错过了什么吗?
std::underlying_type
来确定枚举的基础类型。 - Kerrek SBenum {Val1 = -1};
,因此将其转换为int更自然。 - Steztric