std::basic_ostream<CharT,Traits>::operator= - cppreference.com

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:

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