次のコードでは、 の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]によると、整数変換のみを含む標準変換シーケンスのランクは「変換」です。
[over.ics.rank] 次の規則のいずれかが適用されない限り、同じ形式の 2 つの暗黙的な変換シーケンスは区別できません: [...]
2 つの標準変換シーケンスを比較する場合、前述のルールはどれも適用されないようです。
私は何が欠けていますか?