これは私と数人の同僚を混乱させてきましたが、これが約5つの異なるコンパイラに対するエラーであることを確認しました。それらのすべては、この小さなコードスニペットが「あいまい」であることを返します。
namespace foo {
struct type_t {
int x;
};
void bar( type_t & );
}
void bar( foo::type_t & );
void func( void ) {
foo::type_t x = { 10 };
bar(x);
}
Clangは以下を返します:
func.cpp:12:3: error: call to 'bar' is ambiguous
bar(x);
^~~
func.cpp:5:8: note: candidate function
void bar( type_t & );
^
func.cpp:8:6: note: candidate function
void bar( foo::type_t & );
^
1 error generated.
なぜこうなった?コードには「using」ステートメントはありません。解決順序にfoo名前空間を含めるべきではないのに、なぜそこで検索するのでしょうか。なぜこれが曖昧なのですか?