Skip to content

Commit 2d63fc5

Browse files
committed
start, set_value, set_error, and set_stopped may return a tail_sender
1 parent f79a9c6 commit 2d63fc5

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
@@ -254,27 +254,30 @@ namespace stdexec {
254254
struct set_value_t {
255255
template <class _Receiver, class... _As>
256256
requires tag_invocable<set_value_t, _Receiver, _As...>
257-
void operator()(_Receiver&& __rcvr, _As&&... __as) const noexcept {
257+
auto operator()(_Receiver&& __rcvr, _As&&... __as) const noexcept
258+
-> tag_invoke_result_t<set_value_t, _Receiver, _As...> {
258259
static_assert(nothrow_tag_invocable<set_value_t, _Receiver, _As...>);
259-
(void) tag_invoke(set_value_t{}, (_Receiver&&) __rcvr, (_As&&) __as...);
260+
return tag_invoke(set_value_t{}, (_Receiver&&) __rcvr, (_As&&) __as...);
260261
}
261262
};
262263

263264
struct set_error_t {
264265
template <class _Receiver, class _Error>
265266
requires tag_invocable<set_error_t, _Receiver, _Error>
266-
void operator()(_Receiver&& __rcvr, _Error&& __err) const noexcept {
267+
auto operator()(_Receiver&& __rcvr, _Error&& __err) const noexcept
268+
-> tag_invoke_result_t<set_error_t, _Receiver, _Error> {
267269
static_assert(nothrow_tag_invocable<set_error_t, _Receiver, _Error>);
268-
(void) tag_invoke(set_error_t{}, (_Receiver&&) __rcvr, (_Error&&) __err);
270+
return tag_invoke(set_error_t{}, (_Receiver&&) __rcvr, (_Error&&) __err);
269271
}
270272
};
271273

272274
struct set_stopped_t {
273275
template <class _Receiver>
274276
requires tag_invocable<set_stopped_t, _Receiver>
275-
void operator()(_Receiver&& __rcvr) const noexcept {
277+
auto operator()(_Receiver&& __rcvr) const noexcept
278+
-> tag_invoke_result_t<set_stopped_t, _Receiver> {
276279
static_assert(nothrow_tag_invocable<set_stopped_t, _Receiver>);
277-
(void) tag_invoke(set_stopped_t{}, (_Receiver&&) __rcvr);
280+
return tag_invoke(set_stopped_t{}, (_Receiver&&) __rcvr);
278281
}
279282
};
280283
} // namespace __receivers
@@ -985,8 +988,9 @@ namespace stdexec {
985988
struct start_t {
986989
template <class _Op>
987990
requires tag_invocable<start_t, _Op&>
988-
void operator()(_Op& __op) const noexcept(nothrow_tag_invocable<start_t, _Op&>) {
989-
(void) tag_invoke(start_t{}, __op);
991+
auto operator()(_Op& __op) const noexcept(nothrow_tag_invocable<start_t, _Op&>)
992+
-> tag_invoke_result_t<start_t, _Op&> {
993+
return tag_invoke(start_t{}, __op);
990994
}
991995
};
992996
}

0 commit comments

Comments
 (0)