std::basic_ostream<CharT,Traits>:: operator=

From cppreference.com
protected :
basic_ostream & operator = ( const basic_ostream & rhs ) = delete ;
(1)
protected :
basic_ostream & operator = ( basic_ostream && rhs ) ;
(2) (since C++11)
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

#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
LWG 2067 C++11 1. the parameter type of overload (1) was basic_ostream&
2. the parameter type of overload (2) was const basic_ostream &&
1. added const
2. removed const