我試圖運行從書「加速C++」(A.凱尼格,B.武)一些示例代碼(§8.2.2):爲什麼編譯器在這裏抱怨函數歧義?
#include <iostream>
#include <vector>
using std::cout;
using std::endl;
using std::vector;
template <class In, class X>
In find(In begin, In end, const X &x)
{
while (begin != end && *begin != x) {
++begin;
}
return begin;
}
int main()
{
vector<int> v;
v.push_back(5);
v.push_back(32);
v.push_back(42);
v.push_back(7);
cout << *find(v.begin(), v.end(), 42) << endl;
return 0;
}
的find
功能看起來像這樣的書;我自己寫的main
函數。
clang ++和g ++都不會編譯它。看起來好像他們抱怨我的find
函數引入了std::find
的歧義。但是,我從來沒有在代碼中使用using namespace::std;
和using std::find;
,所以如果包含它,編譯器甚至不應該被允許使用std::find
。這裏發生了什麼?
[Works for me](http://ideone.com/0SZQ7) –
你使用的是什麼版本的clang ++和g ++?你能給我們你收到的錯誤信息嗎?你使用什麼編譯器選項?我用g ++ - 4.6.2和g ++ - 4.7.0測試過,沒有任何問題。 –
注意如果我們添加'#include',g ++ 4.6.3會發出錯誤。 –
aschepler