title: Why are iostreams not copyable?
body: <p>It's <a href="http://coliru.stacked-crooked.com/a/d7ad0cf157387783" rel="noreferrer">possible</a> to make a local copy of an iostream object, using <code>rdbuf</code> and <code>copyfmt</code>. This allows formatting changes to be locally scoped:</p>
  
  <pre><code>std::ostream &amp; operator &lt;&lt; ( std::ostream &amp; os, foo const &amp; smth ) {
      cloned_ostream cs( os );
      cs &lt;&lt; std::hex &lt;&lt; smth.num;
      // os is not switched to hexadecimal, which would be a confusing side-effect
      return os;
  }
  </code></pre>
  
  <p>Why don't the stream classes provide copy constructors to do this?</p>
  
  <p>Have relevant C++ best practices changed since they were designed as non-copyable?</p>