In article <2a0f00c3-10cd-4b64-8203-57c5e681b565
@k13g2000hse.googlegroups.com>, james.kanze@gmail.com says...
[ ... ]
But doesn't use sin in a dependent context in a dependent
context in the template. I was thinking of the classical case,
where the operator<< for std::vector<int> defined in global
namespace doesn't get found when it is used in
std::ostream_iterator. Curiously, I can't reproduce the
symptomes in a simple example, but I've definitely had the
problem myself, and people post it here from time to time.
Here's a fairly simple example:
#include <map>
#include <string>
#include <iostream>
#include <algorithm>
typedef std::map<std::string, int> s_int;
//namespace std {
std::ostream &operator<<(std::ostream &os, s_int::value_type const &v)
{ return os << v.first << ": " << v.second;
}
//}
int main() { s_int m;
m["a"] = 123;
m["b"] = 345;
std::copy(m.begin(), m.end(),
std::ostream_iterator<s_int::value_type>(std::cout, "\n"));
return 0;
}
As it stands right now, it won't compile -- but remove the two
comment delimiters so operator<< is in namespace std, and it compiles
and works just fine.
Lemme guess. operator<<(std::ostream&, int ) is ***NOT*** in global
namespace Right? .. Which is the whole point!