最終更新日時: 2026年07月22日 16時08分23秒 (JST)
rotarymars が更新

履歴 編集

customization point object
<execution>

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

    namespace std::execution {
      struct just_t { unspecified };
      inline constexpr just_t just{};
    }

## 概要

`just`は、非同期操作の開始(start)で値完了関数を呼び出すSenderファクトリである。

## 効果

説明用のパック`ts`に対して、パック`Ts`を`decltype((ts))`とする。下記いずれかの条件をみたすとき、呼び出し式`just(ts...)`は不適格となる。

- `(movable-value<Ts> &&...) == false`

そうでなければ、呼び出し式`just(ts...)`は下記と等価。

    make-sender(just, product-type{ts...})

### Senderアルゴリズムタグ `just`

Senderアルゴリズム動作説明用のクラステンプレート`impls-for`に対して、下記の特殊化が定義される。

    namespace std::execution {
      template<>
      struct impls-for<decayed-typeof<just>> : default-impls {
        static constexpr auto start =
          [](auto& state, auto& rcvr) noexcept -> void {
            auto& [...ts] = state;
            set_value(std::move(rcvr), std::move(ts)...);
          };
      };
    }

## カスタマイゼーションポイント

Receiverとの接続(connect)時に、関連付けられた実行ドメインに対して`execution::transform_sender`経由でSender変換が行われる。 デフォルト実行ドメインでは無変換。

## 例

    #include <string>
    #include <print>
    #include <execution>
    #include <tuple>
    namespace ex = std::execution;
    using namespace std::string_literals;

    int main()
    {
      // 空の値を送信するSender
      ex::sender auto snd0 = ex::just();
      std::tuple<> result0 = std::this_thread::sync_wait(snd0).value();
      std::println("result0={}", result0);

      // 値"C++"を送信するSender
      ex::sender auto snd1 = ex::just("C++"s);
      std::tuple<std::string> result1 = std::this_thread::sync_wait(snd1).value();
      std::println("result1={}", result1);

      // 値(123,'X')を送信するSender
      ex::sender auto snd2 = ex::just(123, 'X');
      std::tuple<int, char> result2 = std::this_thread::sync_wait(snd2).value();
      std::println("result2={}", result2);
    }

### 出力

    result0=()
    result1=("C++")
    result2=(123, 'X')

## バージョン

### 言語

- C++26

### 処理系

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

## 関連項目

- `execution::just_error`
- `execution::just_stopped`

## 参照

- P2300R10 `std::execution`
- P3826R5 Fix Sender Algorithm Customization