Я пытаюсь использовать 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"));
}
Я пытаюсь перегрузить оператор < <. Проблема в том, что код не будет компилироваться, если я не буду окружать определение перегруженного оператора < < с namespace std
. Я думаю, что это связано с механизмом поиска имен на C++, который у меня все еще есть проблема с пониманием. Даже если я определяю версию без шаблонов:
Он по-прежнему не компилируется. Может ли кто-нибудь объяснить, почему?
[Пример ошибки] (http://liveworkspace.org/code/3MJn1M$1) –