最終更新日時: 2026年06月08日 10時13分52秒 (JST)
yoh が更新

履歴 編集

class template
<execution>

# std::this_thread::sync-wait-receiver(C++26)

    namespace std::this_thread {
      template<class Sndr>
      struct sync-wait-receiver {      // exposition only
        using receiver_concept = execution::receiver_tag;
        sync-wait-state<Sndr>* state;  // exposition only

        template<class... Args>
        void set_value(Args&&... args) && noexcept;

        template<class Error>
        void set_error(Error&& err) && noexcept;

        void set_stopped() && noexcept;

        sync-wait-env get_env() const noexcept { return {&state->loop}; }
      };

      template<class Sndr>
      struct sync-wait-state {               // exposition only
        execution::run_loop loop;            // exposition only
        exception_ptr error;                 // exposition only
        sync-wait-result-type<Sndr> result;  // exposition only
      };
    }

## 概要

`sync-wait-receiver`および`sync-wait-state`は、Senderアルゴリズム動作仕様定義で用いられる説明専用のクラステンプレートである。

Senderコンシューマ`sync_wait`動作においてSenderと接続(connect)するReceiver、同Receiverの内部状態として利用される。

### メンバ関数 `set_value`

    template<class... Args>
    void set_value(Args&&... args) && noexcept;

効果 : 下記と等価

    try {
      state->result.emplace(std::forward<Args>(args)...);
    } catch (...) {
      state->error = current_exception();
    }
    state->loop.finish();

### メンバ関数 `set_error`

    template<class Error>
    void set_error(Error&& err) && noexcept

効果 : 下記と等価

    state->error = AS-EXCEPT-PTR(std::forward<Error>(err));
    state->loop.finish();

### メンバ関数 `set_stopped`

    void set_stopped() && noexcept;

効果 : `state->loop.finish()`と等価。

## バージョン

### 言語

- C++26

## 関連項目

- `this_thread::sync_wait`
- `execution::run_loop`

## 参照

- P2300R10 `std::execution`