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

履歴 編集

class template
<execution>

# std::execution::basic-sender(C++26)

    namespace std::execution {
      template<class Tag, class Data, class... Child>
      struct basic-sender : product-type<Tag, Data, Child...> {  // exposition only
        using sender_concept = sender_tag;
        using indices-for = index_sequence_for<Child...>;        // exposition only

        decltype(auto) get_env() const noexcept {
          auto& [_, data, ...child] = *this;
          return impls-for<Tag>::get-attrs(data, child...);
        }

        template<decays-to<basic-sender> Self, receiver Rcvr>
        auto connect(this Self&& self, Rcvr rcvr) noexcept(see below)
          -> basic-operation<Self, Rcvr> {
          return {std::forward<Self>(self), std::move(rcvr)};
        }

        template<decays-to<basic-sender> Self, class... Env>
        static constexpr auto get_completion_signatures();
      };
    }

## 概要

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

`basic-sender<Tag, Data, Child...>`は`sender`のモデルであり、Senderアルゴリズム構築の結果型として利用される。

- `Tag` : Senderアルゴリズムタグ（例：`just`, `then`）
- `Data` : Senderアルゴリズムに指定された追加の引数。複数個の引数は`product-type`型を用いて単一値として保持する。
- `Child` : 子Senderのリスト。Senderファクトリでは0個、Senderアダプタでは通常1個の子Senderを保持する。

## クラス仕様

`basic-sender`の特殊化が集成体となるか否かは未規定である。 `basic-sender`型の式は構造化束縛における初期化子として利用できる。

`basic-sender::connect`メンバ関数`noexcept`節の式は下記の通り。

    is_nothrow_constructible_v<basic-operation<Self, Rcvr>, Self, Rcvr>

### `get_completion_signatures`メンバ関数

    template<class Tag, class Data, class... Child>
    template<decays-to<basic-sender> Sndr, class... Env>
    constexpr auto basic-sender<Tag, Data, Child...>::get_completion_signatures();

型`E`をリスト`Env..., env<>`における先頭の型としたとき、環境 `E`をもつReceiver型を`Rcvr`とする。式`CHECK-TYPE()`を`impls-for<Tag>::template check-types<Sndr, E>()`とし、型`CS`を下記の通り定義する。

- `CHECK-TYPE()`がコア定数式のとき、`op`を`connect_result_t<Sndr, Rcvr>`型の左辺値とする。`CS`は`completion_signatures`の特殊化となり、そのテンプレート引数の集合は評価`op.start()`の結果結果として得られる完了操作の集合に対応する。
- そうでなければ、`CS`は`completion_signatures<>`となる。

テンプレートパラメータ制約 : 式`CHECK-TYPES()`が適格であること。

効果：下記と等価。

    CHECK-TYPES();
    return CS();

## 説明専用エンティティ

説明専用のエイリアステンプレート`indices-for`を下記の通り定義する。

    template<class Sndr>
    using indices-for = remove_reference_t<Sndr>::indices-for;  // exposition only

## バージョン

### 言語

- C++26

## 関連項目

- `make-sender`
- `impls-for`
- `basic-operation`
- `execution::sender`

## 参照

- P2999R3 Sender Algorithm Customization
- P2300R10 `std::execution`
- P3557R3 High-Quality Sender Diagnostics with Constexpr Exceptions
- LWG4455 Add missing constraint to `basic-sender::get_completion_signatures` definition