이 문제는 저와 일부 동료를 혼란스럽게하지만, 약 5 개의 다른 컴파일러에 대한 오류임을 확인했습니다. 그들 모두는이 작은 코드 스 니펫이 "모호하다"고 회신합니다.다른 네임 스페이스의 함수에 대한 C++ 모호한 호출
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.
왜 이런 일이 :
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);
}
연타는 다음 반환? 코드에는 "using"문이 없습니다. 해결 순서에는 foo 네임 스페이스가 포함되어서는 안됩니다. 그렇다면 왜 그곳에서 검색합니까? 왜 이것이 모호한가요?
[ADL] (http://en.wikipedia.org/wiki/Argument-dependent_name_lookup), 일명 Koenig 조회에 대해 읽어보십시오. – ildjarn
gcc에서 : http://ideone.com/G4uHo –
이것은 컴파일러 버그로 보이지 않습니다. g ++, HP C++ 및 Comeau에서도 유사한 오류가 발생합니다. – daxelrod