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

履歴 編集

class
<coroutine>

# std::noop_coroutine_handle(C++20)

    namespace std {
      struct noop_coroutine_promise {};

      template<>
      struct coroutine_handle<noop_coroutine_promise>
      {
        constexpr operator coroutine_handle<>() const noexcept;

        constexpr explicit operator bool() const noexcept;
        constexpr bool done() const noexcept;

        constexpr void operator()() const noexcept;
        constexpr void resume() const noexcept;
        constexpr void destroy() const noexcept;

        noop_coroutine_promise& promise() const noexcept;

        constexpr void* address() const noexcept;

      private:
        coroutine_handle(unspecified);
      };

      using noop_coroutine_handle = coroutine_handle<noop_coroutine_promise>;
    }

## 概要

中断／再開時に何もしないコルーチンへのハンドル。

「何もしないコルーチン」は、非対称コルーチン動作と対称コルーチン動作を実行時に制御するケースで利用される。

## メンバ関数

### 変換

名前 | 説明 | 対応バージョン
--- | --- | ---
`operator coroutine_handle<>` | 型消去されたコルーチンハンドルを返す | C++20

### 観測

名前 | 説明 | 対応バージョン
--- | --- | ---
`operator bool` | `true`を返す | C++20
`done` | `false`を返す | C++20

### 再開

名前 | 説明 | 対応バージョン
--- | --- | ---
`operator()` | 何もしない | C++20
`resume` | 何もしない | C++20
`destroy` | 何もしない | C++20

### Promiseアクセス

名前 | 説明 | 対応バージョン
--- | --- | ---
`promise` | Promiseオブジェクトへの参照を返す | C++20

### アドレス

名前 | 説明 | 対応バージョン
--- | --- | ---
`address` | コルーチンハンドルに対応するアドレス値を返す | C++20

## バージョン

### 言語

- C++20

### 処理系

- Clang: ??
- GCC: 11.1 ✅
- Visual C++: ??

## 関連項目

- C++20 コルーチン
- `coroutine_handle`
- `noop_coroutine`

## 参照

- P0913R1 Add symmetric coroutine control transfer
- LWG3460 Unimplementable `noop_coroutine_handle` guarantees