@@ -17,31 +17,39 @@ namespace std::execution {
1717
1818`then`は[パイプ可能Senderアダプタオブジェクト](sender_adaptor_closure.md)であり、パイプライン記法をサポートする。
1919
20+ 本ページにてSenderアルゴリズム`then`/[`upon_error`](upon_error.md)/[`upon_stopped`](upon_stopped.md)の動作仕様を包括的に説明するため、以降のセクションにおいては`then-cpo`, `set-cpo`をそれぞれ下記の通りとする。
21+
22+ | `then-cpo` | `set-cpo` |
23+ |----|----|
24+ | `then` | [`set_value`](set_value.md) |
25+ | [`upon_error`](upon_error.md) | [`set_error`](set_error.md) |
26+ | [`upon_stopped`](upon_stopped.md) | [`set_stopped`](set_stopped.md) |
27+
2028
2129## 効果
22- 説明用の式`sndr`と`f`に対して、`decltype((sndr))`が[`sender`](sender.md)を満たさない、もしくは`decltype((f))`が[`movable-value`](../movable-value.md)を満たさないとき、呼び出し式`then(sndr, f)`は不適格となる。
30+ 説明用の式`sndr`と`f`に対して、`decltype((sndr))`が[`sender`](sender.md)を満たさない、もしくは`decltype((f))`が[`movable-value`](../movable-value.md)を満たさないとき、呼び出し式`then-cpo (sndr, f)`は不適格となる。
2331
24- そうでなければ、呼び出し式`then(sndr, f)`は`sndr`が1回だけ評価されることを除いて、下記と等価。
32+ そうでなければ、呼び出し式`then-cpo (sndr, f)`は`sndr`が1回だけ評価されることを除いて、下記と等価。
2533
2634```cpp
27- transform_sender(get-domain-early(sndr), make-sender(then, f, sndr))
35+ transform_sender(get-domain-early(sndr), make-sender(then-cpo , f, sndr))
2836```
2937* transform_sender[ link transform_sender.md]
3038* get-domain-early[ link get-domain-early.md]
3139* make-sender[ link make-sender.md]
3240
3341
34- ### Senderアルゴリズムタグ ` then `
42+ ### Senderアルゴリズムタグ ` then-cpo `
3543Senderアルゴリズム動作説明用のクラステンプレート[ ` impls-for ` ] ( impls-for.md ) に対して、下記の特殊化が定義される。
3644
3745``` cpp
3846namespace std ::execution {
3947 template<>
40- struct impls-for<decayed-typeof<then >> : default-impls {
48+ struct impls-for<decayed-typeof<then-cpo >> : default-impls {
4149 static constexpr auto complete =
4250 [ ] <class Tag, class... Args>
4351 (auto, auto& fn, auto& rcvr, Tag, Args&&... args) noexcept -> void {
44- if constexpr (same_as<Tag, decayed-typeof<set_value >>) {
52+ if constexpr (same_as<Tag, decayed-typeof<set-cpo >>) {
4553 TRY-SET-VALUE(rcvr,
4654 invoke(std::move(fn), std::forward<Args >(args)...));
4755 } else {
@@ -57,12 +65,11 @@ namespace std::execution {
5765* decayed-typeof[link /reference/functional/decayed-typeof.md]
5866* impls-for[link impls-for.md]
5967* default-impls[link impls-for.md]
60- * set_value[link set_value.md]
6168* TRY-SET-VALUE[link set_value.md]
6269* invoke[link /reference/functional/invoke.md]
6370* std::move[link /reference/utility/move.md]
6471
65- メンバ関数`impls-for<decayed-typeof<then>>::check-types`の効果は下記の通り。
72+ メンバ関数`impls-for<decayed-typeof<then-cpo >>::check-types`の効果は下記の通り。
6673
6774```cpp
6875auto cs = get_completion_signatures<child-type<Sndr>, FWD-ENV-T(Env)...>();
@@ -85,10 +92,10 @@ cs.for-each(overload-set{fn, [](auto){}});
8592Senderアルゴリズム構築時および[ Receiver] ( receiver.md ) 接続時に、関連付けられた実行ドメインに対して[ ` execution::transform_sender ` ] ( transform_sender.md ) 経由でSender変換が行われる。
8693[ デフォルト実行ドメイン](default_domain.md)では無変換。
8794
88- 戻り値の[Sender](sender.md)`out_sndr`が下記を満たさない場合、呼び出し式`then(sndr, f)`の動作は未定義となる。
95+ 戻り値の[Sender](sender.md)`out_sndr`が下記を満たさない場合、呼び出し式`then-cpo (sndr, f)`の動作は未定義となる。
8996
90- - `then`に対する`sndr`の値結果データで `f`またはそのコピーを呼び出し、`out_sndr`の値完了として`f`の結果値を用いること。
91- - 他の完了操作では変更なしに転送すること 。
97+ - `then-cpo `に対する`sndr`の`set-cpo`結果データで `f`またはそのコピーを呼び出し、`out_sndr`の値完了として`f`の結果値を用いること。
98+ - 上記以外の完了操作では変更なしに転送すること 。
9299
93100
94101## 例
0 commit comments