200200
201201 < p class ="text-right "> < small >
202202 最終更新日時(UTC):
203- < span itemprop ="datePublished " content ="2025-07-14T14:04:00 ">
204- 2025年07月14日 14時04分00秒
203+ < span itemprop ="datePublished " content ="2025-08-23T06:06:34 ">
204+ 2025年08月23日 06時06分34秒
205205 </ span >
206206 < br />
207207 < span itemprop ="author " itemscope itemtype ="http://schema.org/Person ">
208- < span itemprop ="name "> Koichi Murase </ span >
208+ < span itemprop ="name "> yoh </ span >
209209 </ span >
210210 が更新
211211 </ small > </ p >
@@ -236,7 +236,12 @@ <h2>概要</h2>
236236< p > Promise型< code > p</ code > をもつコルーチンにおいて、Await式< code > co_await as_awaitable(expr, p)</ code > は下記のように動作する。</ p >
237237< ul >
238238< li > 式< code > expr.as_awaitable(p)</ code > が有効ならば、同式が返すAwaitableオブジェクトに対してAwait式を実行する。</ li >
239- < li > < code > expr</ code > が< a href ="single-sender.html "> 単一の値を送信するSender</ a > であり、Promise型が停止完了ハンドラを定義するならば、下記動作を行う。< ul >
239+ < li >
240+ < p > < code > expr</ code > が< a href ="sender.html "> Sender型</ a > かつ< code > < a href ="get_await_completion_adaptor.html "> get_await_completion_adaptor</ a > </ code > 問い合わせに対応する場合、同問い合わせが返すSenderアダプタを< code > expr</ code > に適用した結果を< code > adapted-expr</ code > とする。</ p >
241+ </ li >
242+ < li >
243+ < p > < code > expr</ code > (または上記ステップの< code > adapted-expr</ code > )が< a href ="single-sender.html "> 単一の値を送信するSender</ a > であり、Promise型が停止完了ハンドラを定義するならば、下記動作を行う。</ p >
244+ < ul >
240245< li > Senderを< a href ="connect.html "> 接続(connect)</ a > し、結果< a href ="operation_state.html "> Operation State</ a > をAwaitableオブジェクトに格納する。</ li >
241246< li > コルーチンを中断し、Operation Stateを< a href ="start.html "> 開始(start)</ a > する。</ li >
242247< li > < a href ="../queryable.html "> クエリオブジェクト</ a > による< a href ="receiver.html "> Receiver</ a > 環境への問い合わせは、Promise型に関連付けられた環境(< code > get_env</ code > )へと転送される。</ li >
@@ -259,6 +264,7 @@ <h2>効果</h2>
259264< li > < a class ="cpprefjp-defined-word " data-desc ="関数等の意味論を構成する要素の1つ。Preconditions。関数呼び出し時に満たされていると関数が想定する条件。満たさなければ未定義の動作。契約属性の`[[expects]]`に相当 "> 事前条件</ a > : < code > < a href ="../is-awaitable.html "> is-awaitable</ a > <Expr, Promise> == true</ code > 、かつPromise型< code > U</ code > のコルーチンにおける式< code > co_await expr</ code > がPromise型< code > Promise</ code > のコルーチンにおける同式と等しさを保持すること。</ li >
260265</ ul >
261266</ li >
267+ < li > そうではなく、説明用の式< code > adapted-expr</ code > を< code > expr</ code > が1回だけ評価されることを除いて< code > < a href ="get_await_completion_adaptor.html "> get_await_completion_adaptor</ a > (< a href ="get_env.html "> get_env</ a > (expr))(expr)</ code > としたとき、< code > has-queryable-await-completion-adaptor<Expr></ code > と< code > awaitable-sender<decltype((adapted-expr)), Promise></ code > が共に満たされるならば、式< code > sender-awaitable{adapted-expr, p}</ code > </ li >
262268< li > そうではなく、< code > awaitable-sender<Expr, Promise></ code > ならば、式< code > sender-awaitable{expr, p}</ code > </ li >
263269< li > そうでなければ、式< code > (void(p), expr)</ code > </ li >
264270</ ul >
@@ -275,6 +281,17 @@ <h3>コンセプト<code>awaitable-sender</code></h3>
275281< span class ="p "> }</ span >
276282</ code > </ pre > </ div >
277283</ p >
284+ < h3 > コンセプト< code > has-queryable-await-completion-adaptor</ code > </ h3 >
285+ < 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 >
286+ < span class ="k "> template</ span > < span class ="o "> <</ span > < span class ="k "> class</ span > < span class ="nc "> Sndr</ span > < span class ="o "> ></ span >
287+ < span class ="n "> concept</ span > < span class ="n "> has</ span > < span class ="o "> -</ span > < span class ="n "> queryable</ span > < span class ="o "> -</ span > < span class ="n "> await</ span > < span class ="o "> -</ span > < span class ="n "> completion</ span > < span class ="o "> -</ span > < span class ="n "> adaptor</ span > < span class ="o "> =</ span > < span class ="c1 "> // exposition only</ span >
288+ < span class ="n "> < a href ="sender.html "> sender</ a > </ span > < span class ="o "> <</ span > < span class ="n "> Sndr</ span > < span class ="o "> ></ span >
289+ < span class ="o "> &&</ span > < span class ="n "> requires</ span > < span class ="p "> (</ span > < span class ="n "> Sndr</ span > < span class ="o "> &&</ span > < span class ="n "> < a href ="sender.html "> sender</ a > </ span > < span class ="p "> )</ span > < span class ="p "> {</ span >
290+ < span class ="n "> < a href ="get_await_completion_adaptor.html "> get_await_completion_adaptor</ a > </ 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 ="sender.html "> sender</ a > </ span > < span class ="p "> ));</ span >
291+ < span class ="p "> };</ span >
292+ < span class ="p "> }</ span >
293+ </ code > </ pre > </ div >
294+ </ p >
278295< h3 > クラステンプレート< code > sender-awaitable</ code > </ h3 >
279296< 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 >
280297 < span class ="k "> template</ span > < span class ="o "> <</ 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 "> ></ span >
@@ -376,6 +393,7 @@ <h3>クラステンプレート<code>awaitable-receiver</code></h3>
376393</ ul >
377394< h2 > カスタマイゼーションポイント</ h2 >
378395< p > < code > expr</ code > に対して、< a class ="cpprefjp-defined-word " data-desc ="プログラムが文法規則・診断対象の意味規則・単一定義規則を満たすこと " href ="../../../implementation-compliance.html#dfn-well-formed "> 適格</ a > であるならば式< code > expr.as_awaitable(p)</ code > が呼び出される。</ p >
396+ < p > < code > expr</ code > が< a href ="sender.html "> Sender型</ a > かつ関連付けられた< a href ="../queryable.html "> 属性</ a > がクエリオブジェクト< code > < a href ="get_await_completion_adaptor.html "> get_await_completion_adaptor</ a > </ code > に対応するとき、< code > expr</ code > に対して同クエリオブジェクトが返すSenderアダプタを適用してからAwaitableオブジェクトへ変換する。</ p >
379397< h2 > バージョン</ h2 >
380398< h3 > 言語</ h3 >
381399< ul >
@@ -391,12 +409,14 @@ <h3>処理系</h3>
391409< h2 > 関連項目</ h2 >
392410< ul >
393411< li > < code > < a href ="with_awaitable_senders.html "> execution::with_awaitable_senders</ a > </ code > </ li >
412+ < li > < code > < a href ="get_await_completion_adaptor.html "> execution::get_await_completion_adaptor</ a > </ code > </ li >
394413< li > < a href ="../../../lang/cpp20/coroutines.html "> C++20 コルーチン</ a > </ li >
395414</ ul >
396415< h2 > 参照</ h2 >
397416< ul >
398417< li > < a href ="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2300r10.html " target ="_blank "> P2300R10 < code > std::execution</ code > </ a > </ li >
399418< li > < a href ="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2024/p3396r1.html " target ="_blank "> P3396R1 std::execution wording fixes</ a > </ li >
419+ < li > < a href ="https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3570r2.html " target ="_blank "> P3570R2 optional variants in sender/receiver</ a > </ li >
400420</ ul > </ div >
401421
402422 </ div >
0 commit comments