7

次のコードでは、 の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 つの標準変換シーケンスを比較する場合、前述のルールはどれも適用されないようです。

私は何が欠けていますか?

4

1 に答える 1