68
68
69
69
</ head >
70
70
< body >
71
- < header data-kunai-mdinfo ="{"meta": {"header": ["execution"], "id-type": ["cpo"], "namespace": ["std::execution"], "cpp": ["cpp26"]}, "sources": [{"id": "7aa0917a3b7c8c0968a0a28f2849993ca6461dc2", "source": "#include <cassert>\n#include <execution>\nnamespace ex = std::execution;\n\n// MySender\u306f\u4e0b\u8a18\u3044\u305a\u308c\u304b\u306e\u5b8c\u4e86\u64cd\u4f5c\u3092\u884c\u3046\n// \u5024\u5b8c\u4e86 set_value(int)\n// \u505c\u6b62\u5b8c\u4e86 set_stopped()\nstruct MySender {\n using sender_concept = ex::sender_t;\n using completion_signatures = ex::completion_signatures<\n ex::set_value_t(int),\n ex::set_stopped_t()\n >;\n\n template <typename Rcvr>\n struct state {\n using operation_state_concept = ex::operation_state_t;\n\n state(Rcvr rcvr, int val)\n : rcvr_{std::move(rcvr)}, val_{val} {}\n\n void start() noexcept {\n if (0 < val_) {\n ex::set_value(std::move(rcvr_), val_);\n } else {\n ex::set_stopped(std::move(rcvr_));\n }\n }\n\n Rcvr rcvr_;\n int val_;\n };\n\n template <typename Rcvr>\n auto connect(Rcvr rcvr) noexcept {\n return state{std::move(rcvr), val_};\n }\n\n int val_;\n};\n\nint main()\n{\n { // \u95a2\u6570\u547c\u3073\u51fa\u3057\n ex::sender auto snd0 = MySender{-1};\n ex::sender auto snd1 = ex::stopped_as_error(snd0, MyStoppedError{});\n try {\n auto result = std::this_thread::sync_wait(snd1).value();\n std::println(\"(int) {}\", result);\n } catch (MyStoppedError) {\n std::println(\"stopped\");\n }\n }\n\n { // \u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u8a18\u6cd5\n ex::sender auto sndr =\n MySender{-1}\n | ex::stopped_as_error(MyStoppedError{});\n try {\n auto result = std::this_thread::sync_wait(sndr).value();\n std::println(\"(int) {}\", result);\n } catch (MyStoppedError) {\n std::println(\"stopped\");\n }\n }\n}\n"}], "page_id": ["reference", "execution", "execution", "stopped_as_error"]} ">
71
+ < header data-kunai-mdinfo ="{"meta": {"header": ["execution"], "id-type": ["cpo"], "namespace": ["std::execution"], "cpp": ["cpp26"]}, "sources": [{"id": "f8f70450e92bfb08db1251702167200928bac479", "source": "#include <cassert>\n#include <execution>\nnamespace ex = std::execution;\n\n// MySender\u306f\u4e0b\u8a18\u3044\u305a\u308c\u304b\u306e\u5b8c\u4e86\u64cd\u4f5c\u3092\u884c\u3046\n// \u5024\u5b8c\u4e86 set_value(int)\n// \u505c\u6b62\u5b8c\u4e86 set_stopped()\nstruct MySender {\n using sender_concept = ex::sender_t;\n using completion_signatures = ex::completion_signatures<\n ex::set_value_t(int),\n ex::set_stopped_t()\n >;\n\n template <typename Rcvr>\n struct state {\n using operation_state_concept = ex::operation_state_t;\n\n state(Rcvr rcvr, int val)\n : rcvr_{std::move(rcvr)}, val_{val} {}\n\n void start() noexcept {\n if (0 < val_) {\n ex::set_value(std::move(rcvr_), val_);\n } else {\n ex::set_stopped(std::move(rcvr_));\n }\n }\n\n Rcvr rcvr_;\n int val_;\n };\n\n template <typename Rcvr>\n auto connect(Rcvr rcvr) noexcept {\n return state{std::move(rcvr), val_};\n }\n\n int val_;\n};\n\nint main()\n{\n { // \u95a2\u6570\u547c\u3073\u51fa\u3057\n ex::sender auto snd0 = MySender{-1};\n ex::sender auto snd1 = ex::stopped_as_error(snd0, MyStoppedError{});\n try {\n auto [result] = std::this_thread::sync_wait(snd1).value();\n std::println(\"(int) {}\", result);\n } catch (MyStoppedError) {\n std::println(\"stopped\");\n }\n }\n\n { // \u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u8a18\u6cd5\n ex::sender auto sndr =\n MySender{-1}\n | ex::stopped_as_error(MyStoppedError{});\n try {\n auto [result] = std::this_thread::sync_wait(sndr).value();\n std::println(\"(int) {}\", result);\n } catch (MyStoppedError) {\n std::println(\"stopped\");\n }\n }\n}\n"}], "page_id": ["reference", "execution", "execution", "stopped_as_error"]} ">
72
72
< nav class ="navbar navbar-default " role ="navigation ">
73
73
< div class ="container-fluid ">
74
74
< div class ="navbar-header ">
200
200
201
201
< p class ="text-right "> < small >
202
202
最終更新日時(UTC):
203
- < span itemprop ="datePublished " content ="2025-05-30T01:42:05 ">
204
- 2025年05月30日 01時42分05秒
203
+ < span itemprop ="datePublished " content ="2025-05-30T01:54:47 ">
204
+ 2025年05月30日 01時54分47秒
205
205
</ span >
206
206
< br />
207
207
< span itemprop ="author " itemscope itemtype ="http://schema.org/Person ">
@@ -241,7 +241,7 @@ <h2>効果</h2>
241
241
</ code > </ pre > </ div >
242
242
</ p >
243
243
< h3 > Senderアルゴリズムタグ < code > stopped_as_error</ code > </ h3 >
244
- < p > 説明用の式< code > sndr</ code > と< code > env</ code > に対して、型< code > Sndr</ code > を< code > decltype((sndr))</ code > 、型< code > Env</ code > を< code > decltype((env))</ code > とする。< code > < a href ="sender-for.html "> sender-for</ a > <Sndr, stopped_as_error_t> == false</ code > 、もしくは < code > < span href =" https://cpprefjp.github.io/reference/execution/execution/single-sender-value-type.md.nolink " > single-sender-value-type </ span > <Sndr, Env> </ code > が < a class =" cpprefjp-defined-word " data-desc =" プログラムが適格でないこと。コンパイルエラーなどになる " href =" ../../../implementation-compliance.html#dfn-ill-formed " > 不適格 </ a > または < code > void </ code > のとき、式< code > stopped_as_error.transform_sender(sndr, env)</ code > は< a class ="cpprefjp-defined-word " data-desc ="プログラムが適格でないこと。コンパイルエラーなどになる " href ="../../../implementation-compliance.html#dfn-ill-formed "> 不適格</ a > となる。</ p >
244
+ < p > 説明用の式< code > sndr</ code > と< code > env</ code > に対して、型< code > Sndr</ code > を< code > decltype((sndr))</ code > 、型< code > Env</ code > を< code > decltype((env))</ code > とする。< code > < a href ="sender-for.html "> sender-for</ a > <Sndr, stopped_as_error_t> == false</ code > のとき、式< code > stopped_as_error.transform_sender(sndr, env)</ code > は< a class ="cpprefjp-defined-word " data-desc ="プログラムが適格でないこと。コンパイルエラーなどになる " href ="../../../implementation-compliance.html#dfn-ill-formed "> 不適格</ a > となる。</ p >
245
245
< p > そうでなければ、式< code > stopped_as_error.transform_sender(sndr, env)</ code > は下記と等価。</ p >
246
246
< p > < div class ="codehilite "> < pre > < span > </ span > < code > < span class ="k "> auto</ span > < span class ="o "> &&</ span > < span class ="p "> [</ span > < span class ="n "> _</ span > < span class ="p "> ,</ span > < span class ="n "> err</ span > < span class ="p "> ,</ span > < span class ="n "> child</ span > < span class ="p "> ]</ span > < span class ="o "> =</ span > < span class ="n "> sndr</ span > < span class ="p "> ;</ span >
247
247
< span class ="k "> using</ span > < span class ="n "> E</ span > < span class ="o "> =</ span > < span class ="k "> decltype</ span > < span class ="p "> (</ span > < span class ="k "> auto</ span > < span class ="p "> (</ span > < span class ="n "> err</ span > < span class ="p "> ));</ span >
@@ -258,7 +258,7 @@ <h2>カスタマイゼーションポイント</h2>
258
258
< p > < a href ="receiver.html "> Receiver</ a > との< a href ="connect.html "> 接続(connect)</ a > 時に、< a href ="get-domain-late.html "> 関連付けられた実行ドメイン</ a > に対して< code > < a href ="transform_sender.html "> execution::transform_sender</ a > </ code > 経由でSender変換が行われる。
259
259
< a href ="default_domain.html "> デフォルト実行ドメイン</ a > では< code > stopped_as_error.transform_sender(sndr, env)</ code > が呼ばれ、前述仕様通りのSenderへと変換される。</ p >
260
260
< h2 > 例</ h2 >
261
- < p > < div class ="yata " id ="7aa0917a3b7c8c0968a0a28f2849993ca6461dc2 "> < div class ="codehilite "> < pre > < span > </ span > < code > < span class ="cp "> #include</ span > < span class ="cpf "> < a href ="../../cassert.html "> <cassert></ a > </ span > < span class ="cp "> </ span >
261
+ < p > < div class ="yata " id ="f8f70450e92bfb08db1251702167200928bac479 "> < div class ="codehilite "> < pre > < span > </ span > < code > < span class ="cp "> #include</ span > < span class ="cpf "> < a href ="../../cassert.html "> <cassert></ a > </ span > < span class ="cp "> </ span >
262
262
< span class ="cp "> #include</ span > < span class ="cpf "> < a href ="../../execution.html "> <execution></ a > </ span > < span class ="cp "> </ span >
263
263
< span class ="k "> namespace</ span > < span class ="n "> ex</ span > < span class ="o "> =</ span > < span class ="n "> std</ span > < span class ="o "> ::</ span > < span class ="n "> execution</ span > < span class ="p "> ;</ span >
264
264
@@ -305,7 +305,7 @@ <h2>例</h2>
305
305
< span class ="n "> < a href ="sender.html "> ex::sender</ a > </ span > < span class ="k "> auto</ span > < span class ="n "> snd0</ span > < span class ="o "> =</ span > < span class ="n "> MySender</ span > < span class ="p "> {</ span > < span class ="o "> -</ span > < span class ="mi "> 1</ span > < span class ="p "> };</ span >
306
306
< span class ="n "> < a href ="sender.html "> ex::sender</ a > </ span > < span class ="k "> auto</ span > < span class ="n "> snd1</ span > < span class ="o "> =</ span > < span class ="n "> < span style ="color:#ff0000 "> ex::stopped_as_error</ span > </ span > < span class ="p "> (</ span > < span class ="n "> snd0</ span > < span class ="p "> ,</ span > < span class ="n "> MyStoppedError</ span > < span class ="p "> {});</ span >
307
307
< span class ="k "> try</ span > < span class ="p "> {</ span >
308
- < span class ="k "> auto</ span > < span class ="n "> result</ span > < span class ="o "> =</ span > < span class ="n "> < a href ="../this_thread/sync_wait.html "> std::this_thread::sync_wait</ a > </ span > < span class ="p "> (</ span > < span class ="n "> snd1</ span > < span class ="p "> ).</ span > < span class ="n "> value</ span > < span class ="p "> ();</ span >
308
+ < span class ="k "> auto</ span > < span class ="p " > [ </ span > < span class =" n "> result</ span > < span class =" p " > ] </ span > < span class ="o "> =</ span > < span class ="n "> < a href ="../this_thread/sync_wait.html "> std::this_thread::sync_wait</ a > </ span > < span class ="p "> (</ span > < span class ="n "> snd1</ span > < span class ="p "> ).</ span > < span class ="n "> value</ span > < span class ="p "> ();</ span >
309
309
< span class ="n "> < a href ="../../print/println.html "> std::println</ a > </ span > < span class ="p "> (</ span > < span class ="s "> "(int) {}"</ span > < span class ="p "> ,</ span > < span class ="n "> result</ span > < span class ="p "> );</ span >
310
310
< span class ="p "> }</ span > < span class ="k "> catch</ span > < span class ="p "> (</ span > < span class ="n "> MyStoppedError</ span > < span class ="p "> )</ span > < span class ="p "> {</ span >
311
311
< span class ="n "> < a href ="../../print/println.html "> std::println</ a > </ span > < span class ="p "> (</ span > < span class ="s "> "stopped"</ span > < span class ="p "> );</ span >
@@ -317,7 +317,7 @@ <h2>例</h2>
317
317
< span class ="n "> MySender</ span > < span class ="p "> {</ span > < span class ="o "> -</ span > < span class ="mi "> 1</ span > < span class ="p "> }</ span >
318
318
< span class ="o "> |</ span > < span class ="n "> < span style ="color:#ff0000 "> ex::stopped_as_error</ span > </ span > < span class ="p "> (</ span > < span class ="n "> MyStoppedError</ span > < span class ="p "> {});</ span >
319
319
< span class ="k "> try</ span > < span class ="p "> {</ span >
320
- < span class ="k "> auto</ span > < span class ="n "> result</ span > < span class ="o "> =</ span > < span class ="n "> < a href ="../this_thread/sync_wait.html "> std::this_thread::sync_wait</ a > </ span > < span class ="p "> (</ span > < span class ="n "> sndr</ span > < span class ="p "> ).</ span > < span class ="n "> value</ span > < span class ="p "> ();</ span >
320
+ < span class ="k "> auto</ span > < span class ="p " > [ </ span > < span class =" n "> result</ span > < span class =" p " > ] </ span > < span class ="o "> =</ span > < span class ="n "> < a href ="../this_thread/sync_wait.html "> std::this_thread::sync_wait</ a > </ span > < span class ="p "> (</ span > < span class ="n "> sndr</ span > < span class ="p "> ).</ span > < span class ="n "> value</ span > < span class ="p "> ();</ span >
321
321
< span class ="n "> < a href ="../../print/println.html "> std::println</ a > </ span > < span class ="p "> (</ span > < span class ="s "> "(int) {}"</ span > < span class ="p "> ,</ span > < span class ="n "> result</ span > < span class ="p "> );</ span >
322
322
< span class ="p "> }</ span > < span class ="k "> catch</ span > < span class ="p "> (</ span > < span class ="n "> MyStoppedError</ span > < span class ="p "> )</ span > < span class ="p "> {</ span >
323
323
< span class ="n "> < a href ="../../print/println.html "> std::println</ a > </ span > < span class ="p "> (</ span > < span class ="s "> "stopped"</ span > < span class ="p "> );</ span >
0 commit comments