It's possible to make a local copy of an iostream object, using rdbuf and copyfmt. This allows formatting changes to be locally scoped:
std::ostream & operator << ( std::ostream & os, foo const & smth ) {
cloned_ostream cs( os );
cs << std::hex << smth.num;
// os is not switched to hexadecimal, which would be a confusing side-effect
return os;
}
Why don't the stream classes provide copy constructors to do this?
Have relevant C++ best practices changed since they were designed as non-copyable?