最終更新日時(UTC): 2024年06月11日 13時45分38秒
Akira Takahashi が更新

履歴 編集

function
<syncstream>

# std::basic_syncbuf::operator=(C++20)

    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!";
    }

### 出力

    Hello, World!

## バージョン

### 言語

- C++20

### 処理系

- Clang: ??
- GCC: 11.1 ✅
- Visual C++: 2019 update 10 ✅

## 参照

- P0053R7 C++ Synchronized Buffered Ostream