2
2
<feed xmlns =" http://www.w3.org/2005/Atom" >
3
3
<title >cpprefjp - C++日本語リファレンス</title >
4
4
<link href =" https://cpprefjp.github.io" />
5
- <updated >2025-05-30T14:46:46.645439 </updated >
6
- <id >194ee18a-3a5d-4072-9623-f1601230c457 </id >
5
+ <updated >2025-05-30T15:44:19.949279 </updated >
6
+ <id >20787424-1adb-434e-917e-07e5b8108395 </id >
7
7
8
8
9
+ <entry >
10
+ <title >as_awaitable -- execution/as_awaitable: 概要増補 (#1384)</title >
11
+ <link href =" https://cpprefjp.github.io/reference/execution/execution/as_awaitable.html" />
12
+ <id >1a6cd9cb028ec39fe556b218ffebd57039df314d:reference/execution/execution/as_awaitable.md</id >
13
+ <updated >2025-05-31T00:39:36+09:00</updated >
14
+
15
+ <summary type =" html" >< pre>< code> diff --git a/reference/execution/execution/as_awaitable.md b/reference/execution/execution/as_awaitable.md
16
+ index 96fb0d803..eede9fa1b 100644
17
+ --- a/reference/execution/execution/as_awaitable.md
18
+ +++ b/reference/execution/execution/as_awaitable.md
19
+ @@ -13,7 +13,19 @@ namespace std::execution {
20
+ * unspecified[italic]
21
+
22
+ ## 概要
23
+ -`as_awaitable`は、オブジェクトを特定コルーチン内でAwaitableに変換するカスタマイゼーションポイントオブジェクトである。
24
+ +`as_awaitable`は、オブジェクトを特定の[コルーチン](/lang/cpp20/coroutines.md)内でAwaitableに変換するカスタマイゼーションポイントオブジェクトである。
25
+ +
26
+ +Promise型`p`をもつコルーチンにおいて、Await式`co_await as_awaitable(expr, p)`は下記のように動作する。
27
+ +
28
+ +- 式`expr.as_awaitable(p)`が有効ならば、同式が返すAwaitableオブジェクトに対してAwait式を実行する。
29
+ +- `expr`が[単一の値を送信するSender](single-sender.md)であり、Promise型が停止完了ハンドラを定義するならば、下記動作を行う。
30
+ + - Senderを[接続(connect)](connect.md)し、結果[Operation State](operation_state.md)をAwaitableオブジェクトに格納する。
31
+ + - コルーチンを中断し、Operation Stateを[開始(start)](start.md)する。
32
+ + - [クエリオブジェクト](../queryable.md)による[Receiver](receiver.md)環境への問い合わせは、Promise型に関連付けられた環境(`get_env`)へと転送される。
33
+ + - Senderが[値完了](set_value.md)した場合、送信値をAwait式の結果としてコルーチンを再開する。
34
+ + - Senderが[エラー完了](set_error.md)した場合、エラー値を例外としてコルーチンから再スローする。
35
+ + - Senderが[停止完了](set_stopped.md)した場合、停止完了ハンドラ(`unhandled_stopped`)が返す別のコルーチンを再開させる。
36
+ +- そうでなければ、式`expr`に対してAwait式を実行する。
37
+
38
+
39
+ ## 効果
40
+ @@ -43,6 +55,7 @@ namespace std::execution {
41
+ }
42
+ ```
43
+ * single-sender[link single-sender.md]
44
+ +* env_of_t[link env_of_t.md]
45
+ * sender_to[link sender_to.md]
46
+ * convertible_to[link /reference/concepts/convertible_to.md]
47
+ * coroutine_handle& lt;& gt;[link /reference/coroutine/coroutine_handle.md]
48
+ @@ -102,7 +115,7 @@ struct awaitable-receiver {
49
+
50
+ 説明用の式`rcvr`を`awaitable-reciever`型の右辺値、`crcvr`を`rcvr`をconst参照する左辺値、`vs`を式パック、`err`を`Err`型の式とする。このとき
51
+
52
+ -- [`constructible_from`](/reference/concepts/constructible_from.md)`& lt;result-type, decltype((vs))...& gt;`を満たすとき、式`set_value(rcvr, vs...)`は下記と等価。そうでなければ、式`set_value(rcvr, vs...)`は不適格となる。
53
+ +- [`constructible_from`](/reference/concepts/constructible_from.md)`& lt;result-type, decltype((vs))...& gt;`を満たすとき、式[`set_value`](set_value.md)`(rcvr, vs...)`は下記と等価。そうでなければ、式`set_value(rcvr, vs...)`は不適格となる。
54
+
55
+ ```cpp
56
+ try {
57
+ @@ -116,7 +129,7 @@ struct awaitable-receiver {
58
+ * current_exception()[link /reference/exception/current_exception.md]
59
+ * resume()[link /reference/coroutine/coroutine_handle/resume.md]
60
+
61
+ -- 式`set_error(rcvr, err)`は下記と等価。
62
+ +- 式[`set_error`](set_error.md)`(rcvr, err)`は下記と等価。
63
+
64
+ ```cpp
65
+ rcvr.result-ptr-& gt;template emplace& lt;2& gt;(AS-EXCEPT-PTR(err));
66
+ @@ -125,7 +138,7 @@ struct awaitable-receiver {
67
+ * template emplace[link /reference/variant/variant/emplace.md]
68
+ * resume()[link /reference/coroutine/coroutine_handle/resume.md]
69
+
70
+ -- 式`set_stopped(rcvr)`は下記と等価。
71
+ +- 式[`set_stopped`](set_stopped.md)`(rcvr)`は下記と等価。
72
+
73
+ ```cpp
74
+ static_cast& lt;coroutine_handle& lt;& gt;& gt;(rcvr.continuation.promise().unhandled_stopped()).resume();
75
+ @@ -134,7 +147,7 @@ struct awaitable-receiver {
76
+ * promise()[link /reference/coroutine/coroutine_handle/promise.md]
77
+ * resume()[link /reference/coroutine/coroutine_handle/resume.md]
78
+
79
+ -- [`forwarding-query`](../forwarding-query.md)を満たす型の式`tag`とパック式`as`に対して、[`get_env`](get_env.md)`(crcvr).query(tag, as...)`は下記と等価。
80
+ +- [`forwarding-query`](../forwarding-query.md)を満たす型の式`tag`とパック式`as`に対して、式[`get_env`](get_env.md)`(crcvr).query(tag, as...)`は下記と等価。
81
+
82
+ ```cpp
83
+ tag(get_env(as_const(crcvr.continuation.promise())), as...)
84
+ < /code>< /pre> </summary >
85
+
86
+ <author >
87
+ <name >yoh</name >
88
+
89
+ </author >
90
+ </entry >
91
+
9
92
<entry >
10
93
<title >class-type -- execution: as_awaitable (#1384)</title >
11
94
<link href =" https://cpprefjp.github.io/reference/execution/class-type.html" />
@@ -1384,31 +1467,4 @@ index 000000000..c03171959
1384
1467
</author >
1385
1468
</entry >
1386
1469
1387
- <entry >
1388
- <title >with_awaitable_senders -- execution/with_awaitable_senders: remove forbid chars</title >
1389
- <link href =" https://cpprefjp.github.io/reference/execution/execution/with_awaitable_senders.html" />
1390
- <id >a1eaff0ecb6591461ea27f6eb861a47fdb57d1d9:reference/execution/execution/with_awaitable_senders.md</id >
1391
- <updated >2025-05-30T17:17:23+09:00</updated >
1392
-
1393
- <summary type =" html" >< pre>< code> diff --git a/reference/execution/execution/with_awaitable_senders.md b/reference/execution/execution/with_awaitable_senders.md
1394
- index 429e09102..ec76e23ad 100644
1395
- --- a/reference/execution/execution/with_awaitable_senders.md
1396
- +++ b/reference/execution/execution/with_awaitable_senders.md
1397
- @@ -173,7 +173,7 @@ value=42
1398
-
1399
-
1400
- ## 関連項目
1401
- -- [`execution::as_awaitable`](as_awaitable.md.nolink)
1402
- +- [`execution::as_awaitable`](as_awaitable.md.nolink)
1403
- - [コルーチン](/lang/cpp20/coroutines.md)
1404
-
1405
-
1406
- < /code>< /pre> </summary >
1407
-
1408
- <author >
1409
- <name >yoh</name >
1410
-
1411
- </author >
1412
- </entry >
1413
-
1414
1470
</feed >
0 commit comments