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

From cppreference.com
< cpp‎ | io‎ | basic ostream

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

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
--- | --- | --- | ---
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

Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/io/basic_ostream/operator%3D&oldid=156958"