4

次の関数呼び出しを検討してください。

foo::bar();

11.3.1.1.1、パラグラフ 3 [over.call.func] ( N4778 ) は、このケースをカバーしています。

修飾されていない関数呼び出しでは、名前は->or.演算子によって修飾されず、より一般的な形式のprimary-expressionを持ちます。名前は、関数呼び出しでの名前検索の通常のルールに従って、関数呼び出しのコンテキストで検索されます...

ここで、は、またはによって修飾されていないという意味で、修飾されていfoo::barない名前です。したがって、この段落が適用されます。ここで、「~のコンテキストで検索された」というフレーズの意味は、6.4、パラグラフ 2 [basic.lookup] で説明されています。->.

「式のコンテキストで検索された」名前は、その式が見つかったスコープで非修飾名として検索されます。

ただし、 name lookup の領域ではfoo::bar修飾名です。つまり、この段落の組み合わせは基本的に、修飾名は非修飾名検索の規則によって検索されるということを示しています。しかし、修飾されていない名前のルックアップがより狭いスコープ、つまりtoに再帰的に入ることができるとは思いません。これは欠陥ですか?foo::barfoobar

4

1 に答える 1