我試圖使用stl copy()在地圖中打印鍵值對。代碼如下:使用模板參數重載運算符<<時編譯錯誤
#include <iterator>
#include <iostream>
#include <algorithm>
#include <map>
using namespace std;
//compile error if I comment out "namespace std"
namespace std {
template<typename F, typename S>
ostream& operator<<(ostream& os, const pair<F,S>& p) {
return os << p.first << "\t" << p.second << endl;
}
}
int main() {
map<int, int> m;
fill_n(inserter(m, m.begin()), 10, make_pair(90,120));
copy(m.begin(), m.end(), ostream_iterator<pair<int,int> >(cout,"\n"));
}
我想重載operator < <。問題是代碼不會編譯,除非我將重載運算符< <的定義與namespace std
一起包圍。我認爲這是由於C++的名稱查找機制,我仍然無法理解。即使我定義這樣的非模板版本:
它仍然不會編譯。誰能解釋爲什麼?
[錯誤示例](http://liveworkspace.org/code/3MJn1M$1) – 2013-02-19 02:41:41