Skip to content

Commit 2210f64

Browse files
author
cpprefjp-autoupdate
committed
update automatically
1 parent cdcec15 commit 2210f64

File tree

3 files changed

+110
-40
lines changed

3 files changed

+110
-40
lines changed

reference/execution/execution/as_awaitable.html

Lines changed: 24 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,11 @@
2828
<meta property="og:url" content="https://cpprefjp.github.io/reference/execution/execution/as_awaitable.html" />
2929
<meta property="og:site_name" content="cpprefjp - C++日本語リファレンス" />
3030
<meta property="og:type" content="article" />
31-
<meta property="og:description" content="`as_awaitable`は、オブジェクトを特定コルーチン内でAwaitableに変換するカスタマイゼーションポイントオブジェクトである" />
31+
<meta property="og:description" content="`as_awaitable`は、オブジェクトを特定の[コルーチン](/lang/cpp20/coroutines.md)内でAwaitableに変換するカスタマイゼーションポイントオブジェクトである" />
3232
<meta name="twitter:card" content="summary" />
3333
<meta name="twitter:title" content="as_awaitable - cpprefjp C++日本語リファレンス" />
3434
<meta name="twitter:url" content="https://cpprefjp.github.io/reference/execution/execution/as_awaitable.html" />
35-
<meta name="twitter:description" content="`as_awaitable`は、オブジェクトを特定コルーチン内でAwaitableに変換するカスタマイゼーションポイントオブジェクトである" />
35+
<meta name="twitter:description" content="`as_awaitable`は、オブジェクトを特定の[コルーチン](/lang/cpp20/coroutines.md)内でAwaitableに変換するカスタマイゼーションポイントオブジェクトである" />
3636

3737

3838
<link rel="alternate" type="application/atom+xml" title="Atom" href="https://cpprefjp.github.io/rss.xml" />
@@ -200,8 +200,8 @@
200200

201201
<p class="text-right"><small>
202202
最終更新日時(UTC):
203-
<span itemprop="datePublished" content="2025-05-30T14:37:05">
204-
2025年05月30日 14時37分05秒
203+
<span itemprop="datePublished" content="2025-05-30T15:39:36">
204+
2025年05月30日 15時39分36秒
205205
</span>
206206
<br/>
207207
<span itemprop="author" itemscope itemtype="http://schema.org/Person">
@@ -232,7 +232,21 @@
232232
</code></pre></div>
233233
</p>
234234
<h2>概要</h2>
235-
<p><code>as_awaitable</code>は、オブジェクトを特定コルーチン内でAwaitableに変換する<a class="cpprefjp-defined-word" data-desc="プログラム定義型に対するオーバーロードが許されている標準関数名について、中でいい感じにオーバーロード解決して呼び出してくれる関数オブジェクト">カスタマイゼーションポイントオブジェクト</a>である。</p>
235+
<p><code>as_awaitable</code>は、オブジェクトを特定の<a href="../../../lang/cpp20/coroutines.html">コルーチン</a>内でAwaitableに変換する<a class="cpprefjp-defined-word" data-desc="プログラム定義型に対するオーバーロードが許されている標準関数名について、中でいい感じにオーバーロード解決して呼び出してくれる関数オブジェクト">カスタマイゼーションポイントオブジェクト</a>である。</p>
236+
<p>Promise型<code>p</code>をもつコルーチンにおいて、Await式<code>co_await as_awaitable(expr, p)</code>は下記のように動作する。</p>
237+
<ul>
238+
<li><code>expr.as_awaitable(p)</code>が有効ならば、同式が返すAwaitableオブジェクトに対してAwait式を実行する。</li>
239+
<li><code>expr</code><a href="single-sender.html">単一の値を送信するSender</a>であり、Promise型が停止完了ハンドラを定義するならば、下記動作を行う。<ul>
240+
<li>Senderを<a href="connect.html">接続(connect)</a>し、結果<a href="operation_state.html">Operation State</a>をAwaitableオブジェクトに格納する。</li>
241+
<li>コルーチンを中断し、Operation Stateを<a href="start.html">開始(start)</a>する。</li>
242+
<li><a href="../queryable.html">クエリオブジェクト</a>による<a href="receiver.html">Receiver</a>環境への問い合わせは、Promise型に関連付けられた環境(<code>get_env</code>)へと転送される。</li>
243+
<li>Senderが<a href="set_value.html">値完了</a>した場合、送信値をAwait式の結果としてコルーチンを再開する。</li>
244+
<li>Senderが<a href="set_error.html">エラー完了</a>した場合、エラー値を<a class="cpprefjp-defined-word" data-desc="問題が発生したときに、現在実行位置を過去に通過・記録した位置に戻し、文脈情報を添えて紐づけられた処理(例外ハンドラー)を呼び出す仕組み。またはその事態">例外</a>としてコルーチンから再スローする。</li>
245+
<li>Senderが<a href="set_stopped.html">停止完了</a>した場合、停止完了ハンドラ(<code>unhandled_stopped</code>)が返す別のコルーチンを再開させる。</li>
246+
</ul>
247+
</li>
248+
<li>そうでなければ、式<code>expr</code>に対してAwait式を実行する。</li>
249+
</ul>
236250
<h2>効果</h2>
237251
<p>説明用の式<code>expr</code>と左辺値<code>p</code>に対して、型<code>Expr</code><code>decltype((expr))</code>、型<code>Promise</code><code><a href="../../type_traits/decay.html">decay_t</a>&lt;decltype((p))&gt;</code>とする。</p>
238252
<p>呼び出し式<code>as_awaitable(expr, p)</code>は、<code>expr</code><code>p</code>の評価が不定順で順序付けられることを除いて、下記と等価。</p>
@@ -253,7 +267,7 @@ <h3>コンセプト<code>awaitable-sender</code></h3>
253267
<p><div class="codehilite"><pre><span></span><code><span class="k">namespace</span> <span class="n">std</span><span class="o">::</span><span class="n">execution</span> <span class="p">{</span>
254268
<span class="k">template</span><span class="o">&lt;</span><span class="k">class</span> <span class="nc">Sndr</span><span class="p">,</span> <span class="k">class</span> <span class="nc">Promise</span><span class="o">&gt;</span>
255269
<span class="n">concept</span> <span class="n">awaitable</span><span class="o">-</span><span class="n">sender</span> <span class="o">=</span>
256-
<span class="n"><a href="single-sender.html">single-sender</a></span><span class="o">&lt;</span><span class="n">Sndr</span><span class="p">,</span> <span class="n">env_of_t</span><span class="o">&lt;</span><span class="n">Promise</span><span class="o">&gt;&gt;</span> <span class="o">&amp;&amp;</span>
270+
<span class="n"><a href="single-sender.html">single-sender</a></span><span class="o">&lt;</span><span class="n">Sndr</span><span class="p">,</span> <span class="n"><a href="env_of_t.html">env_of_t</a></span><span class="o">&lt;</span><span class="n">Promise</span><span class="o">&gt;&gt;</span> <span class="o">&amp;&amp;</span>
257271
<span class="n"><a href="sender_to.html">sender_to</a></span><span class="o">&lt;</span><span class="n">Sndr</span><span class="p">,</span> <span class="n">awaitable</span><span class="o">-</span><span class="n">receiver</span><span class="o">&gt;</span> <span class="o">&amp;&amp;</span> <span class="c1">// <i>see below</i></span>
258272
<span class="n">requires</span> <span class="p">(</span><span class="n">Promise</span><span class="o">&amp;</span> <span class="n">p</span><span class="p">)</span> <span class="p">{</span>
259273
<span class="p">{</span> <span class="n">p</span><span class="p">.</span><span class="n">unhandled_stopped</span><span class="p">()</span> <span class="p">}</span> <span class="o">-&gt;</span> <span class="n"><a href="../../concepts/convertible_to.html">convertible_to</a></span><span class="o">&lt;</span><span class="n"><a href="../../coroutine/coroutine_handle.html">coroutine_handle&lt;&gt;</a></span><span class="o">&gt;</span><span class="p">;</span>
@@ -297,7 +311,7 @@ <h3>クラステンプレート<code>awaitable-receiver</code></h3>
297311
<p>説明用の式<code>rcvr</code><code>awaitable-reciever</code>型の右辺値、<code>crcvr</code><code>rcvr</code>をconst参照する左辺値、<code>vs</code>を式パック、<code>err</code><code>Err</code>型の式とする。このとき</p>
298312
<ul>
299313
<li>
300-
<p><code><a href="../../concepts/constructible_from.html">constructible_from</a>&lt;result-type, decltype((vs))...&gt;</code>を満たすとき、式<code>set_value(rcvr, vs...)</code>は下記と等価。そうでなければ、式<code>set_value(rcvr, vs...)</code><a class="cpprefjp-defined-word" data-desc="プログラムが適格でないこと。コンパイルエラーなどになる" href="../../../implementation-compliance.html#dfn-ill-formed">不適格</a>となる。</p>
314+
<p><code><a href="../../concepts/constructible_from.html">constructible_from</a>&lt;result-type, decltype((vs))...&gt;</code>を満たすとき、式<code><a href="set_value.html">set_value</a>(rcvr, vs...)</code>は下記と等価。そうでなければ、式<code>set_value(rcvr, vs...)</code><a class="cpprefjp-defined-word" data-desc="プログラムが適格でないこと。コンパイルエラーなどになる" href="../../../implementation-compliance.html#dfn-ill-formed">不適格</a>となる。</p>
301315
<p><div class="codehilite"><pre><span></span><code><span class="k">try</span> <span class="p">{</span>
302316
<span class="n">rcvr</span><span class="p">.</span><span class="n">result</span><span class="o">-</span><span class="n">ptr</span><span class="o">-&gt;</span><span class="n"><a href="../../variant/variant/emplace.html">template emplace</a></span><span class="o">&lt;</span><span class="mi">1</span><span class="o">&gt;</span><span class="p">(</span><span class="n">vs</span><span class="p">...);</span>
303317
<span class="p">}</span> <span class="k">catch</span><span class="p">(...)</span> <span class="p">{</span>
@@ -308,20 +322,20 @@ <h3>クラステンプレート<code>awaitable-receiver</code></h3>
308322
</p>
309323
</li>
310324
<li>
311-
<p><code>set_error(rcvr, err)</code>は下記と等価。</p>
325+
<p><code><a href="set_error.html">set_error</a>(rcvr, err)</code>は下記と等価。</p>
312326
<p><div class="codehilite"><pre><span></span><code><span class="n">rcvr</span><span class="p">.</span><span class="n">result</span><span class="o">-</span><span class="n">ptr</span><span class="o">-&gt;</span><span class="n"><a href="../../variant/variant/emplace.html">template emplace</a></span><span class="o">&lt;</span><span class="mi">2</span><span class="o">&gt;</span><span class="p">(</span><span class="n">AS</span><span class="o">-</span><span class="n">EXCEPT</span><span class="o">-</span><span class="n">PTR</span><span class="p">(</span><span class="n">err</span><span class="p">));</span>
313327
<span class="n">rcvr</span><span class="p">.</span><span class="n">continuation</span><span class="p">.</span><span class="n"><a href="../../coroutine/coroutine_handle/resume.html">resume()</a></span><span class="p">;</span>
314328
</code></pre></div>
315329
</p>
316330
</li>
317331
<li>
318-
<p><code>set_stopped(rcvr)</code>は下記と等価。</p>
332+
<p><code><a href="set_stopped.html">set_stopped</a>(rcvr)</code>は下記と等価。</p>
319333
<p><div class="codehilite"><pre><span></span><code><span class="k">static_cast</span><span class="o">&lt;</span><span class="n"><a href="../../coroutine/coroutine_handle.html">coroutine_handle&lt;&gt;</a></span><span class="o">&gt;</span><span class="p">(</span><span class="n">rcvr</span><span class="p">.</span><span class="n">continuation</span><span class="p">.</span><span class="n"><a href="../../coroutine/coroutine_handle/promise.html">promise()</a></span><span class="p">.</span><span class="n">unhandled_stopped</span><span class="p">()).</span><span class="n"><a href="../../coroutine/coroutine_handle/resume.html">resume()</a></span><span class="p">;</span>
320334
</code></pre></div>
321335
</p>
322336
</li>
323337
<li>
324-
<p><code><a href="../forwarding-query.html">forwarding-query</a></code>を満たす型の式<code>tag</code>とパック式<code>as</code>に対して、<code><a href="get_env.html">get_env</a>(crcvr).query(tag, as...)</code>は下記と等価。</p>
338+
<p><code><a href="../forwarding-query.html">forwarding-query</a></code>を満たす型の式<code>tag</code>とパック式<code>as</code>に対して、<code><a href="get_env.html">get_env</a>(crcvr).query(tag, as...)</code>は下記と等価。</p>
325339
<p><div class="codehilite"><pre><span></span><code><span class="n">tag</span><span class="p">(</span><span class="n"><a href="get_env.html">get_env</a></span><span class="p">(</span><span class="n"><a href="../../utility/as_const.html">as_const</a></span><span class="p">(</span><span class="n">crcvr</span><span class="p">.</span><span class="n">continuation</span><span class="p">.</span><span class="n"><a href="../../coroutine/coroutine_handle/promise.html">promise()</a></span><span class="p">)),</span> <span class="n">as</span><span class="p">...)</span>
326340
</code></pre></div>
327341
</p>

rss.xml

Lines changed: 85 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,93 @@
22
<feed xmlns="http://www.w3.org/2005/Atom">
33
<title>cpprefjp - C++日本語リファレンス</title>
44
<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>
77

88

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">&lt;pre&gt;&lt;code&gt;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&amp;lt;&amp;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)`&amp;lt;result-type, decltype((vs))...&amp;gt;`を満たすとき、式`set_value(rcvr, vs...)`は下記と等価。そうでなければ、式`set_value(rcvr, vs...)`は不適格となる。
53+
+- [`constructible_from`](/reference/concepts/constructible_from.md)`&amp;lt;result-type, decltype((vs))...&amp;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-&amp;gt;template emplace&amp;lt;2&amp;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&amp;lt;coroutine_handle&amp;lt;&amp;gt;&amp;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+
&lt;/code&gt;&lt;/pre&gt;</summary>
85+
86+
<author>
87+
<name>yoh</name>
88+
<email>[email protected]</email>
89+
</author>
90+
</entry>
91+
992
<entry>
1093
<title>class-type -- execution: as_awaitable (#1384)</title>
1194
<link href="https://cpprefjp.github.io/reference/execution/class-type.html"/>
@@ -1384,31 +1467,4 @@ index 000000000..c03171959
13841467
</author>
13851468
</entry>
13861469

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">&lt;pre&gt;&lt;code&gt;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-
&lt;/code&gt;&lt;/pre&gt;</summary>
1407-
1408-
<author>
1409-
<name>yoh</name>
1410-
<email>[email protected]</email>
1411-
</author>
1412-
</entry>
1413-
14141470
</feed>

sitemap.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14584,7 +14584,7 @@
1458414584

1458514585
<url>
1458614586
<loc>https://cpprefjp.github.io/reference/execution/execution/as_awaitable.html</loc>
14587-
<lastmod>2025-05-30T23:37:05+09:00</lastmod>
14587+
<lastmod>2025-05-31T00:39:36+09:00</lastmod>
1458814588
<changefreq>daily</changefreq>
1458914589
<priority>0.6</priority>
1459014590
</url>

0 commit comments

Comments
 (0)