Disagree: tight coupling is part of the class structure. It is not a breakage of encapsulation, but a way to enforce it. Prefer function objects when you are not duplicating state.
It depends on the class: how much does the insertion operator need to know to serialize your class?
Besides granting friendship, it is also common to have a "to string" type of member function, which makes it unnecessary to require friendship, even though it is perfectly OK to do it (since serialization is part of a class's structure).
I always make a ToString member function to return a string representation of my class just like other libraries do (also Java/C#). But I think having friends with ostream is ok because it is so common. Almost every C++ coder out there knows about it right?
[edit]
damn, 1 minute late. Maybe some crappy net connection.
it is also common to have a "to string" type of member function
Any idea who as in which programming language came out with this "to string" concept ? Java has it so I was thinking it they may have borrowed the concept from C++ instead.