@@ -99,10 +99,10 @@ namespace std::execution {
9999* schedule[ link schedule.md]
100100
101101- ローカルクラス` state-type ` のオブジェクトは[ 構造化束縛] ( /lang/cpp17/structured_bindings.md ) における初期化子として利用できる。
102- - 説明用のパック` Sigs ` を[ ` completion_signatures_of_t ` ] ( completion_signatures_of_t.md ) ` < ` [ ` child-type ` ] ( child-type.md ) ` <Sndr>, ` [ ` FWD-ENV-T ` ] ( ../forwarding_query.md ) ` ( ` [ ` env_of_t ` ] ( env_of_t.md ) ` <Rcvr>)> ` による[ ` completion_signatures ` ] ( completion_signatures.md ) 特殊化のテンプレートパラメータと定義する。説明用のエイリアステンプレート` as-tuple<Tag(Args...)> ` を[ ` decayed-tuple ` ] ( decayed-tuple.md ) ` <Args...> ` と定義する 。型` variant_t ` は下記定義において重複削除した型となる。
102+ - 説明用のパック`Sigs`を[`completion_signatures_of_t`](completion_signatures_of_t.md)`<`[`child-type`](child-type.md)`<Sndr>,` [`FWD-ENV-T`](../forwarding_query.md)`(`[`env_of_t`](env_of_t.md)`<Rcvr>)>`による[`completion_signatures`](completion_signatures.md)特殊化のテンプレートパラメータと定義する。説明用のエイリアステンプレート`as-tuple<Tag(Args...)>`を[`decayed-tuple`](decayed-tuple.md)`<Tag, Args...>`と定義し、説明用の変数テンプレート`is-nothrow-decay-copy-sig<Tag(Args...)>`を型`Args...`が全て例外送出せずdecayコピー可能ならば値`true`、そうでなければ`false`となる`bool const`型のコア定数式と定義する。説明用のパック`error-completion`を、`(is-nothrow-decay-copy-sig<Sigs> &&...)`が`false`ならば[`set_error_t`](set_error.md)`(`[`exception_ptr`](/reference/exception/exception_ptr.md)`)`、そうでなければ空のパックと定義する 。型`variant_t`は下記定義において重複削除した型となる。
103103
104104 ``` cpp
105- variant<monostate, as-tuple<Sigs>...>
105+ variant<monostate, as-tuple<Sigs>..., error-completion... >
106106 ```
107107 * variant[link /reference/variant/variant.md]
108108 * monostate[link /reference/variant/monostate.md]
@@ -115,15 +115,13 @@ namespace std::execution {
115115[]<class Tag , class... Args>(auto, auto& state, auto& rcvr, Tag, Args&&... args) noexcept
116116 -> void {
117117 using result_t = decayed-tuple<Tag, Args...>;
118- constexpr bool nothrow = is_nothrow_constructible_v<result_t, Tag, Args...> ;
118+ constexpr bool nothrow = ( is_nothrow_constructible_v<decay_t< Args >, Args> && ...) ;
119119
120120 try {
121121 state.async-result.template emplace<result_t>(Tag(), std::forward<Args >(args)...);
122122 } catch (...) {
123- if constexpr (!nothrow) {
124- set_error(std::move(rcvr), current_exception());
125- return;
126- }
123+ if constexpr (!nothrow)
124+ state.async-result.template emplace<tuple<set_error_t, exception_ptr>>(set_error, current_exception());
127125 }
128126 start(state.op-state);
129127};
@@ -133,8 +131,9 @@ namespace std::execution {
133131* start[link start.md]
134132* is_nothrow_constructible_v[link /reference/type_traits/is_nothrow_constructible.md]
135133* template emplace[link /reference/variant/variant/emplace.md]
134+ * set_error_t[link set_error.md]
135+ * exception_ptr[link /reference/exception/exception_ptr.md]
136136* current_exception()[link /reference/exception/current_exception.md]
137- * std::move[link /reference/utility/move.md]
138137
139138
140139## 説明専用エンティティ
@@ -212,4 +211,5 @@ Senderアルゴリズム構築時および[Receiver](receiver.md)接続時に、
212211- [P2999R3 Sender Algorithm Customization](https:// www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2999r3.html)
213212- [P2300R10 `std::execution`](https:// www.open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2300r10.html)
214213- [P3396R1 std::execution wording fixes](https:// www.open-std.org/jtc1/sc22/wg21/docs/papers/2024/p3396r1.html)
214+ - [LWG 4198 . `schedule_from` isn' t starting the schedule sender if decay-copying results throws](https://cplusplus.github.io/LWG/issue4198)
215215- [LWG 4203. Constraints on `get-state` functions are incorrect](https://cplusplus.github.io/LWG/issue4203)
0 commit comments