Bu, beni ve birkaç iş arkadaşını karıştırdı, ancak bunun 5 farklı derleyiciye karşı bir hata olduğunu doğruladık. Hepsi bu küçük kod parçacığının "belirsiz" olduğunu geri döndürüyor.C++ farklı ad alanlarındaki işlevlere belirsiz çağrı
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.
neden oluyor:
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 aşağıdaki döndürür? Kodda "kullanma" ifadeleri yoktur. Çözünürlük sırası foo ad alanını içermemeli, o halde neden orada arama yapıyor? Bu neden belirsiz?
[ADL] (http://en.wikipedia.org/wiki/Argument-dependent_name_lookup), aka Koenig araması hakkında bilgi edinin. – ildjarn
gcc: http://ideone.com/G4uHo –
Bu bir derleyici hatası gibi görünmüyor. Benzer hatalar g ++, HP C++ ve Comeau tarafından üretilir. – daxelrod