私はStroustrupの本、オーバーロードと関連する曖昧さに関するセクションを読んでいます。
次のような例があります。
void f1(char);
void f1(long);
void k(int i)
{
f1(i); //ambiguous: f1(char) or f1(long)
}
コメントが述べているように、呼び出しはあいまいです。なんで?
この本の前のセクションでは、仮パラメータと実際のパラメータの一致に基づく 5 つのルールについて説明しました。では、上記の関数呼び出しは「プロモーション」に関するルール 2 に該当するのではないでしょうか? 私の推測では、'i' は long に昇格する必要があり、それで終わりです。
コメントによると、int から char への変換 (降格?) もルール 2 に該当するようです。