Skip to content

Commit 18e58a4

Browse files
committed
start, set_value, set_error, and set_stopped may return a tail_sender
1 parent 12929f0 commit 18e58a4

File tree

1 file changed

+12
-8
lines changed

1 file changed

+12
-8
lines changed

include/stdexec/execution.hpp

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -255,9 +255,10 @@ namespace stdexec {
255255

256256
template <class _Receiver, class... _As>
257257
requires tag_invocable<set_value_t, _Receiver, _As...>
258-
void operator()(_Receiver&& __rcvr, _As&&... __as) const noexcept {
258+
auto operator()(_Receiver&& __rcvr, _As&&... __as) const noexcept
259+
-> tag_invoke_result_t<set_value_t, _Receiver, _As...> {
259260
static_assert(nothrow_tag_invocable<set_value_t, _Receiver, _As...>);
260-
(void) tag_invoke(set_value_t{}, (_Receiver&&) __rcvr, (_As&&) __as...);
261+
return tag_invoke(set_value_t{}, (_Receiver&&) __rcvr, (_As&&) __as...);
261262
}
262263
};
263264

@@ -268,9 +269,10 @@ namespace stdexec {
268269

269270
template <class _Receiver, class _Error>
270271
requires tag_invocable<set_error_t, _Receiver, _Error>
271-
void operator()(_Receiver&& __rcvr, _Error&& __err) const noexcept {
272+
auto operator()(_Receiver&& __rcvr, _Error&& __err) const noexcept
273+
-> tag_invoke_result_t<set_error_t, _Receiver, _Error> {
272274
static_assert(nothrow_tag_invocable<set_error_t, _Receiver, _Error>);
273-
(void) tag_invoke(set_error_t{}, (_Receiver&&) __rcvr, (_Error&&) __err);
275+
return tag_invoke(set_error_t{}, (_Receiver&&) __rcvr, (_Error&&) __err);
274276
}
275277
};
276278

@@ -281,9 +283,10 @@ namespace stdexec {
281283

282284
template <class _Receiver>
283285
requires tag_invocable<set_stopped_t, _Receiver>
284-
void operator()(_Receiver&& __rcvr) const noexcept {
286+
auto operator()(_Receiver&& __rcvr) const noexcept
287+
-> tag_invoke_result_t<set_stopped_t, _Receiver> {
285288
static_assert(nothrow_tag_invocable<set_stopped_t, _Receiver>);
286-
(void) tag_invoke(set_stopped_t{}, (_Receiver&&) __rcvr);
289+
return tag_invoke(set_stopped_t{}, (_Receiver&&) __rcvr);
287290
}
288291
};
289292
} // namespace __receivers
@@ -1057,8 +1060,9 @@ namespace stdexec {
10571060
struct start_t {
10581061
template <class _Op>
10591062
requires tag_invocable<start_t, _Op&>
1060-
void operator()(_Op& __op) const noexcept(nothrow_tag_invocable<start_t, _Op&>) {
1061-
(void) tag_invoke(start_t{}, __op);
1063+
auto operator()(_Op& __op) const noexcept(nothrow_tag_invocable<start_t, _Op&>)
1064+
-> tag_invoke_result_t<start_t, _Op&> {
1065+
return tag_invoke(start_t{}, __op);
10621066
}
10631067
};
10641068
}

0 commit comments

Comments
 (0)