basic_syncbuf& operator=(basic_syncbuf&& rhs) noexcept;
概要
ムーブ代入を行う。このとき、保留中の出力はラップされたストリームへ転送される。
効果
保留中の出力を転送するためにemit()
を呼び出した後、rhs
から*this
へムーブ代入を行う。
戻り値
*this
事後条件
rhs.get_wrapped() == nullptr
はtrue
である。allocator_traits<Allocator>::propagate_on_container_move_assignment::value
がtrue
のとき、this->get_allocator() == rhs.get_allocator()
はtrue
である。- そうではなく、
allocator_traits<Allocator>::propagate_on_container_move_assignment::value
がfalse
のときは、 アロケータは変更されない。
例外
投げない。
備考
この代入演算子は、rhs
をそのラップされたストリームバッファから切り離し、rhs
を破棄しても出力が生成されないようにする。
例
#include <iostream>
#include <syncstream>
#include <utility>
int main()
{
std::osyncstream aout{std::cout};
aout << "Hello, ";
std::osyncstream bout = std::move(aout); // 通常 std::basic_osyncstream から呼ばれる。
// また、ここで "Hello, " が転送される。
bout << "World!";
}
xxxxxxxxxx
#include <iostream>
#include <syncstream>
#include <utility>
int main()
{
std::osyncstream aout{std::cout};
aout << "Hello, ";
std::osyncstream bout = std::move(aout); // 通常 std::basic_osyncstream から呼ばれる。
// また、ここで "Hello, " が転送される。
bout << "World!";
}
出力
Hello, World!
バージョン
言語
- C++20
処理系
- Clang: ??
- GCC: 11.1 ✅
- Visual C++: 2019 update 10 ✅