:あいまいな関数id-expressionのC++ 11初期化子?以下のC++コード11で
void f(int) {}
void f(double) {}
void (*p)(int) = f;
は2つの機能があります。
第3のf
識別子はid式であり、初期化子はp
です。 5.1.1p8 [expr.prim.general]/8で
それは言う:
[ID-発現]の種類は、識別子のタイプです。 結果は識別子で示されるエンティティです。エンティティが関数、変数、またはデータメンバーの場合は結果が左辺値、それ以外の場合は正値です。
f
は、2つの異なるタイプの2つの異なるエンティティを参照している可能性があるため、「エンティティ」または「タイプ」はありません。
このような状況に対処する標準のテキストがありますか?
実装はこれを拡張として曖昧にするか、どこかで必要とされますか? (いくつかの他のテキストのないものは、実装が曖昧としてF IDの発現を拒否することができることを主張できる)
私には証拠はありませんが、私はこれがあいまいではないと思います。オーバーロードされた関数が** f(T1)対f(T2)と呼ばれるときに何が起こるかを考えてみましょう。ここで、コンパイラはどの関数(ポインタ)を呼び出す必要があるかを決定する必要があります。 IMOこれは同様のケースです。 (そして+1、ついに良いC++の質問です!) –
これは標準で必要ですが、それを扱うテキストは覚えていません。私を検索させてください。 – Nawaz
@DietmarKühlまあ、それは私が言っていることです... –