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

履歴 編集

concept
<execution>

# std::execution::receiver(C++26)

    namespace std::execution {
      template<class Rcvr>
      concept receiver =
        derived_from<typename remove_cvref_t<Rcvr>::receiver_concept, receiver_tag> &&
        requires(const remove_cvref_t<Rcvr>& rcvr) {
          { get_env(rcvr) } -> queryable;
        } &&
        move_constructible<remove_cvref_t<Rcvr>> &&
        constructible_from<remove_cvref_t<Rcvr>, Rcvr> &&
        is_nothrow_move_constructible_v<remove_cvref_t<Rcvr>>;

      struct receiver_tag {};  // タグ型
    }

## 概要

`receiver`は、型`Rcvr`がReceiver型の要件を満たすことを表すコンセプトである。

下記をみたすクラス型はReceiverとみなせる。

- `receiver_tag`をメンバ型`Rcvr::receiver_concept`として定義する
- `get_env`で環境を取得できる
- 例外送出せずにムーブ構築可能

## モデル

`final`指定されたクラス型は`receiver`のモデルではない。

## 例

    #include <execution>
    namespace ex = std::execution;

    struct SinkReceiver {
      using receiver_concept = ex::receiver_tag;

      void set_value(auto&&...) noexcept {}
      void set_error(auto&&) noexcept {}
      void set_stopped() noexcept {}
    };

    int main()
    {
      static_assert(ex::receiver<SinkReceiver>);
    }

### 出力

## バージョン

### 言語

- C++26

### 処理系

- Clang: ??
- GCC: ??
- ICC: ??
- Visual C++: ??

## 参照

- P2300R10 `std::execution`
- P3388R3 When Do You Know connect Doesn't Throw?
- P4154R0 Renaming various execution things