Skip to content

Commit 157a932

Browse files
committed
execution/then,upon_{error,stopped}: 効果説明をthenに統合
メンテナンスコスト軽減のためC++26 WD仕様記述の構造に揃える。
1 parent eb824e2 commit 157a932

File tree

4 files changed

+21
-113
lines changed

4 files changed

+21
-113
lines changed

reference/execution/execution/let_value.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ namespace std::execution {
1717
1818
`let_value`は[パイプ可能Senderアダプタオブジェクト](sender_adaptor_closure.md)であり、パイプライン記法をサポートする。
1919
20-
本ページにてSenderアルゴリズム`let_value`/[`let_error`](let_error.md)/[`let_stopped`](let_stopped.md)の動作仕様を包括的に説明するため、以降のセクションにおいては`let-cpo`, `set-cpo`をそれぞれ下記の通りとする。
20+
本ページにてSenderアルゴリズム`let_value`/[`let_error`](let_error.md)/[`let_stopped`](let_stopped.md)の動作仕様を包括的に説明するため、以降のセクションにおいては`let-cpo`, `set-cpo`をそれぞれ下記の通りとする。
2121
2222
| `let-cpo` | `set-cpo` |
2323
|----|----|

reference/execution/execution/then.md

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -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`
3543
Senderアルゴリズム動作説明用のクラステンプレート[`impls-for`](impls-for.md)に対して、下記の特殊化が定義される。
3644

3745
```cpp
3846
namespace 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
6875
auto cs = get_completion_signatures<child-type<Sndr>, FWD-ENV-T(Env)...>();
@@ -85,10 +92,10 @@ cs.for-each(overload-set{fn, [](auto){}});
8592
Senderアルゴリズム構築時および[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
## 例

reference/execution/execution/upon_error.md

Lines changed: 1 addition & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -18,56 +18,7 @@ namespace std::execution {
1818
`upon_error`は[パイプ可能Senderアダプタオブジェクト](sender_adaptor_closure.md)であり、パイプライン記法をサポートする。
1919
2020
21-
## 効果
22-
説明用の式`sndr`と`f`に対して、`decltype((sndr))`が[`sender`](sender.md)を満たさない、もしくは`decltype((f))`が[`movable-value`](../movable-value.md)を満たさないとき、呼び出し式`upon_error(sndr, f)`は不適格となる。
23-
24-
そうでなければ、呼び出し式`upon_error(sndr, f)`は`sndr`が1回だけ評価されることを除いて、下記と等価。
25-
26-
```cpp
27-
transform_sender(get-domain-early(sndr), make-sender(upon_error, f, sndr))
28-
```
29-
* transform_sender[link transform_sender.md]
30-
* get-domain-early[link get-domain-early.md]
31-
* make-sender[link make-sender.md]
32-
33-
34-
### Senderアルゴリズムタグ `upon_error`
35-
Senderアルゴリズム動作説明用のクラステンプレート[`impls-for`](impls-for.md)に対して、下記の特殊化が定義される。
36-
37-
```cpp
38-
namespace std::execution {
39-
template<>
40-
struct impls-for<decayed-typeof<upon_error>> : default-impls {
41-
static constexpr auto complete =
42-
[]<class Tag, class... Args>
43-
(auto, auto& fn, auto& rcvr, Tag, Args&&... args) noexcept -> void {
44-
if constexpr (same_as<Tag, decayed-typeof<set_error>>) {
45-
TRY-SET-VALUE(rcvr,
46-
invoke(std::move(fn), std::forward<Args>(args)...));
47-
} else {
48-
Tag()(std::move(rcvr), std::forward<Args>(args)...);
49-
}
50-
};
51-
};
52-
}
53-
```
54-
* decayed-typeof[link /reference/functional/decayed-typeof.md]
55-
* impls-for[link impls-for.md]
56-
* default-impls[link impls-for.md]
57-
* set_error[link set_error.md]
58-
* TRY-SET-VALUE[link set_value.md]
59-
* invoke[link /reference/functional/invoke.md]
60-
* std::move[link /reference/utility/move.md]
61-
62-
63-
## カスタマイゼーションポイント
64-
Senderアルゴリズム構築時および[Receiver](receiver.md)接続時に、関連付けられた実行ドメインに対して[`execution::transform_sender`](transform_sender.md)経由でSender変換が行われる。
65-
[デフォルト実行ドメイン](default_domain.md)では無変換。
66-
67-
戻り値の[Sender](sender.md)`out_sndr`が下記を満たさない場合、呼び出し式`upon_error(sndr, f)`の動作は未定義となる。
68-
69-
- `upon_error`に対する`sndr`のエラー結果データで`f`またはそのコピーを呼び出し、`out_sndr`の値完了として`f`の結果値を用いること。
70-
- 他の完了操作では変更なしに転送すること。
21+
Senderアルゴリズム`upon_error`の仕様は、[`then`](then.md)ページを参照のこと。
7122
7223
7324
## 例

reference/execution/execution/upon_stopped.md

Lines changed: 1 addition & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -17,57 +17,7 @@ namespace std::execution {
1717
1818
`upon_stopped`は[パイプ可能Senderアダプタオブジェクト](sender_adaptor_closure.md)であり、パイプライン記法をサポートする。
1919
20-
21-
## 効果
22-
説明用の式`sndr`と`f`に対して、`decltype((sndr))`が[`sender`](sender.md)を満たさない、もしくは`decltype((f))`が[`movable-value`](../movable-value.md)を満たさないとき、呼び出し式`upon_stopped(sndr, f)`は不適格となる。
23-
24-
そうでなければ、呼び出し式`upon_stopped(sndr, f)`は`sndr`が1回だけ評価されることを除いて、下記と等価。
25-
26-
```cpp
27-
transform_sender(get-domain-early(sndr), make-sender(upon_stopped, f, sndr))
28-
```
29-
* transform_sender[link transform_sender.md]
30-
* get-domain-early[link get-domain-early.md]
31-
* make-sender[link make-sender.md]
32-
33-
34-
### Senderアルゴリズムタグ `upon_stopped`
35-
Senderアルゴリズム動作説明用のクラステンプレート[`impls-for`](impls-for.md)に対して、下記の特殊化が定義される。
36-
37-
```cpp
38-
namespace std::execution {
39-
template<>
40-
struct impls-for<decayed-typeof<upon_stopped>> : default-impls {
41-
static constexpr auto complete =
42-
[]<class Tag, class... Args>
43-
(auto, auto& fn, auto& rcvr, Tag, Args&&... args) noexcept -> void {
44-
if constexpr (same_as<Tag, decayed-typeof<set_stopped>>) {
45-
TRY-SET-VALUE(rcvr,
46-
invoke(std::move(fn), std::forward<Args>(args)...));
47-
} else {
48-
Tag()(std::move(rcvr), std::forward<Args>(args)...);
49-
}
50-
};
51-
};
52-
}
53-
```
54-
* decayed-typeof[link /reference/functional/decayed-typeof.md]
55-
* impls-for[link impls-for.md]
56-
* default-impls[link impls-for.md]
57-
* set_stopped[link set_stopped.md]
58-
* TRY-SET-VALUE[link set_value.md]
59-
* invoke[link /reference/functional/invoke.md]
60-
* std::move[link /reference/utility/move.md]
61-
62-
63-
## カスタマイゼーションポイント
64-
Senderアルゴリズム構築時および[Receiver](receiver.md)接続時に、関連付けられた実行ドメインに対して[`execution::transform_sender`](transform_sender.md)経由でSender変換が行われる。
65-
[デフォルト実行ドメイン](default_domain.md)では無変換。
66-
67-
戻り値の[Sender](sender.md)`out_sndr`が下記を満たさない場合、呼び出し式`upon_stopped(sndr, f)`の動作は未定義となる。
68-
69-
- `upon_stopped`に対する`sndr`の停止結果データで`f`またはそのコピーを呼び出し、`out_sndr`の値完了として`f`の結果値を用いること。
70-
- 他の完了操作では変更なしに転送すること。
20+
Senderアルゴリズム`upon_stopped`の仕様は、[`then`](then.md)ページを参照のこと。
7121
7222
7323
## 例

0 commit comments

Comments
 (0)