Skip to content

Commit 30b7ea6

Browse files
committed
execution/schedule_from: LWG4198
1 parent 9fee4b5 commit 30b7ea6

File tree

1 file changed

+8
-8
lines changed

1 file changed

+8
-8
lines changed

reference/execution/execution/schedule_from.md

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)