Skip to content

Commit 403ba99

Browse files
committed
execution: C++26 P3284R4 (#1501)
- write_envアダプタ (write-envから昇格) - unstoppableアダプタ
1 parent 48b1149 commit 403ba99

File tree

6 files changed

+67
-18
lines changed

6 files changed

+67
-18
lines changed

reference/execution/execution.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,8 @@ namespace std::execution {
110110
| 名前 | 説明 | 対応バージョン |
111111
|------|------|----------------|
112112
| [`execution::sender_adaptor_closure`](execution/sender_adaptor_closure.md) | パイプライン記法をサポートするSenderアダプタ実装補助 (class template) | C++26 |
113+
| [`execution::write_env`](execution/write_env.md) | Receiver環境を書き換える (customization point object) | C++26 |
114+
| [`execution::unstoppable`](execution/unstoppable.md) | 停止要求を遮断する (customization point object) | C++26 |
113115
| [`execution::starts_on`](execution/starts_on.md) | 指定Scheduler上で開始する (customization point object) | C++26 |
114116
| [`execution::continues_on`](execution/continues_on.md) | 指定Scheduler上で継続する (customization point object) | C++26 |
115117
| [`execution::on`](execution/on.md) | 指定Senderのみ別Scheduler上で実行する (customization point object) | C++26 |
@@ -162,5 +164,6 @@ Senderコンシューマは名前空間 `std::this_thread` で定義される。
162164
## 参照
163165
- [P0024R2 The Parallelism TS Should be Standardized](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0024r2.html)
164166
- [P2300R10 `std::execution`](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2300r10.html)
167+
- [P3284R4 `write_env` and `unstoppable` Sender Adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3284r4.html)
165168
- [P3557R3 High-Quality Sender Diagnostics with Constexpr Exceptions](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3557r3.html)
166169
- [P3682R0 Remove `std::execution::split`](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3682r0.pdf)

reference/execution/execution/child-type.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,11 @@ namespace std::execution {
2121
- C++26
2222
2323
## 関連項目
24+
- [`execution::write_env`](write_env.md)
2425
- [`execution::schedule_from`](schedule_from.md)
2526
- [`execution::let_value`](let_value.md)
2627
- [`execution::into_variant`](into_variant.md)
2728
- [`execution::stopped_as_optional`](stopped_as_optional.md)
28-
- [`write-env`](write-env.md)
2929
3030
3131
## 参照

reference/execution/execution/data-type.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,11 @@ namespace std::execution {
2222
2323
## 関連項目
2424
- [`execution::read_env`](read_env.md)
25+
- [`execution::write_env`](write_env.md)
2526
- [`execution::schedule_from`](schedule_from.md)
2627
- [`execution::then`](then.md)
2728
- [`execution::let_value`](let_value.md)
2829
- [`execution::bulk`](bulk.md)
29-
- [`write-env`](write-env.md)
3030
3131
3232
## 参照

reference/execution/execution/on.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -108,11 +108,11 @@ transform_sender(
108108
if constexpr (same_as<decltype(orig_sch), not-a-scheduler>) {
109109
return not-a-sender{};
110110
} else {
111-
return write-env(
111+
return write_env(
112112
continues_on(
113113
std::forward_like<OutSndr>(closure)(
114114
continues_on(
115-
write-env(std::forward_like<OutSndr>(child), SCHED-ENV(orig_sch)),
115+
write_env(std::forward_like<OutSndr>(child), SCHED-ENV(orig_sch)),
116116
sch)),
117117
orig_sch),
118118
SCHED-ENV(sch));
@@ -128,7 +128,7 @@ transform_sender(
128128
* get_env[link get_env.md]
129129
* query-with-default[link query-with-default.md]
130130
* not-a-sender[link not-a-sender.md]
131-
* write-env[link write-env.md]
131+
* write_env[link write_env.md]
132132
* SCHED-ENV[link scheduler.md]
133133
* std::move[link /reference/utility/move.md]
134134
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
# unstoppable
2+
* execution[meta header]
3+
* cpo[meta id-type]
4+
* std::execution[meta namespace]
5+
* cpp26[meta cpp]
6+
7+
```cpp
8+
namespace std::execution {
9+
inline constexpr unspecified unstoppable{};
10+
}
11+
```
12+
* unspecified[italic]
13+
14+
## 概要
15+
`unstoppable`は、[`get_stop_token`](../get_stop_token.md)クエリオブジェクトが[`never_stop_token`](/reference/stop_token/never_stop_token.md)を返すよう書き換えて、内側[Sender](sender.md)と外側[Receiver](receiver.md)の[環境](../queryable.md)を接続するSenderアダプタである。
16+
17+
18+
## 効果
19+
説明用の式`sndr`に対して、呼び出し式`unstoppable(sndr)`は式[`write_env`](write_env.md)`(sndr,` [`prop`](prop.md)`(`[`get_stop_token`](../get_stop_token.md)`,` [`never_stop_token{}`](/reference/stop_token/never_stop_token.md)`))`と等価。
20+
21+
22+
## バージョン
23+
### 言語
24+
- C++26
25+
26+
### 処理系
27+
- [Clang](/implementation.md#clang): ??
28+
- [GCC](/implementation.md#gcc): ??
29+
- [ICC](/implementation.md#icc): ??
30+
- [Visual C++](/implementation.md#visual_cpp): ??
31+
32+
33+
## 関連項目
34+
- [`execution::write_env`](write_env.md)
35+
36+
37+
## 参照
38+
- [P2300R10 `std::execution`](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2300r10.html)
39+
- [P3284R4 `write_env` and `unstoppable` Sender Adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3284r4.html)

reference/execution/execution/write-env.md renamed to reference/execution/execution/write_env.md

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,29 @@
1-
# write-env
1+
# write_env
22
* execution[meta header]
3-
* function template[meta id-type]
3+
* cpo[meta id-type]
44
* std::execution[meta namespace]
55
* cpp26[meta cpp]
66

77
```cpp
8-
template<sender Sndr, queryable Env>
9-
constexpr auto write-env(Sndr&& sndr, Env&& env); // exposition only
8+
namespace std::execution {
9+
inline constexpr unspecified write_env{};
10+
}
1011
```
12+
* unspecified[italic]
1113
1214
## 概要
13-
`write-env`は、Senderアルゴリズム動作仕様定義で用いられる説明専用のSenderアダプタである
15+
`write_env`は、入力[Sender](sender.md)と[クエリ可能オブジェクト](../queryable.md)を受け取り、[Receiver](receiver.md)`rcvr`と[接続(connect)](connect.md)される際に、クエリ可能オブジェクトと[`get_env`](get_env.md)`(rcvr)`を合成した環境に関連付けられたReceiverと接続されるSenderを生成するSenderアダプタである
1416
15-
[クエリ可能オブジェクト](../queryable.md)`env`と接続先[Receiver](receiver.md)の環境を合成した、新たなクエリ可能オブジェクトに関連付けれられたSenderを生成する。
1617
18+
## 効果
19+
説明用の式`sndr`と`env`に対して、`decltype((sndr))`が[`sender`](sender.md)を満たさない、もしくは`decltype((env))`が[`queryable`](../queryable.md)を満たさないとき、呼び出し式`write_env(sndr, env)`は不適格となる。
1720
18-
## 戻り値
19-
説明専用の`write-env-t`を空のクラスとしたとき、下記を返す。
20-
21-
```cpp
22-
make-sender(write-env-t(), std::forward<Env>(env), std::forward<Sndr>(sndr))
23-
```
24-
* make-sender[link make-sender.md]
21+
そうでなければ、呼び出し式`write_env(sndr, env)`は式[`make-sender`](make-sender.md)`(write_env, env, sndr)`と等価。
2522
2623
2724
### Senderアルゴリズムタグ
25+
説明用の`write-env-t`を`decltype(auto(write_env))`とする。
26+
2827
Senderアルゴリズム動作説明用のクラステンプレート[`impls-for`](impls-for.md)に対して、下記の特殊化が定義される。
2928
3029
```cpp
@@ -59,12 +58,20 @@ struct impls-for<write-env-t> : default-impls {
5958
### 言語
6059
- C++26
6160

61+
### 処理系
62+
- [Clang](/implementation.md#clang): ??
63+
- [GCC](/implementation.md#gcc): ??
64+
- [ICC](/implementation.md#icc): ??
65+
- [Visual C++](/implementation.md#visual_cpp): ??
66+
6267

6368
## 関連項目
6469
- [`execution::on`](on.md)
70+
- [`execution::unstoppable`](unstoppable.md)
6571

6672

6773
## 参照
6874
- [P2300R10 `std::execution`](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2300r10.html)
6975
- [P3396R1 std::execution wording fixes](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2024/p3396r1.html)
7076
- [P3557R3 High-Quality Sender Diagnostics with Constexpr Exceptions](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3557r3.html)
77+
- [P3284R4 `write_env` and `unstoppable` Sender Adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3284r4.html)

0 commit comments

Comments
 (0)