私がばかげた質問をしていないことを願っています。Googleで検索しましたが、あまり情報が見つかりませんでした。
Herb Sutter による Exceptional C++ Book Item 31 から引用した次の簡単なコードがあります。
namespace NS
{
class T{};
void f(T);
}
void f(NS::T);
int main()
{
NS::T params;
f(params);
}
私がそれをコンパイルしたとき:
prog.cpp: 関数 'int main()':
prog.cpp:12:13: エラー: オーバーロードされた 'f(NS::T&)' の呼び出しがあいまい
です prog.cpp:12:13: 注: 候補は:
prog.cpp:8:6: 注: void f(NS::T)
prog.cpp:4:10: 注: void NS::f(NS::T)
の引数依存ルックアップが原因であることは理解していますf
。コンパイラは の 2 つのバージョンを検出しました。1f
つはグローバル名前空間にあり、もう 1 つはNS
名前空間にあります。
私の質問は次のとおりです。
複数の名前空間で名前を検索する場合、順序はありますか?
最初に囲んでいる名前空間を検索し、次にグローバル名前空間を常に検索する必要がありますか?
この場合、
NS
名前空間で既に一致が見つかったのに、なぜあいまいさが残るのでしょうか?
質問が明確でない場合は、お気軽に修正してください。
ありがとうございました。