std::basic_ostream::operator=(3)

NAME
std::basic_ostream::operator= - std::basic_ostream::operator=

Synopsis
   protected: (1)
   basic_ostream& operator=( const basic_ostream& rhs ) = delete;
   protected: (2) (since C++11)
   basic_ostream& operator=( basic_ostream&& rhs );
   1) The copy assignment operator is protected, and is deleted. Output streams are not
   CopyAssignable.
   2) The move assignment operator exchanges all data members of the base class, except
   for rdbuf(), with rhs, as if by calling swap(*rhs). This move assignment operator is
   protected: it is only called by the move assignment operators of the derived movable
   output stream classes std::basic_ofstream and std::basic_ostringstream, which know
   how to correctly move-assign the associated streambuffers.

Parameters
   rhs - the basic_ostream object from which to assign to *this

Example
// Run this code
 #include <iostream>
 #include <sstream>
 #include <utility>
 int main()
 {
     std::ostringstream s;
 // std::cout = s; // ERROR: copy assignment operator is deleted
 // std::cout = std::move(s); // ERROR: move assignment operator is protected
     s = std::move(std::ostringstream() << 42); // OK, moved through derived
     std::cout << s.str() << '\n';
 }

Output:
 42
   Defect reports
   The following behavior-changing defect reports were applied retroactively to
   previously published C++ standards.
      DR Applied to Behavior as published Correct behavior
                       1. the parameter type of overload (1) was
   LWG 2067 C++11 basic_ostream& 1. added const
                       2. the parameter type of overload (2) was const 2. removed const
                       basic_ostream&&