在下面的代码中,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] 枚举类型的右值可以转换为整数类型的右值。
根据[over.best.ics],仅包含整数转换的标准转换序列的等级是'Conversion'。
[over.ics.rank] 两个相同形式的隐式转换序列是无法区分的转换序列,除非以下规则之一适用:[...]
在比较两个标准转换序列时,上述规则似乎都不适用。
我错过了什么?