Skip to content

Commit 03145f0

Browse files
committed
fixed a few coroutine related issues
1 parent ad1bb84 commit 03145f0

File tree

4 files changed

+12
-5
lines changed

4 files changed

+12
-5
lines changed

include/beman/execution26/detail/product_type.hpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
#include <memory>
88
#include <cstddef>
99

10+
#include <beman/execution26/detail/suppress_push.hpp>
11+
1012
// ----------------------------------------------------------------------------
1113

1214
namespace beman::execution26::detail {
@@ -126,4 +128,6 @@ struct tuple_element<I, T> {
126128

127129
// ----------------------------------------------------------------------------
128130

131+
#include <beman/execution26/detail/suppress_pop.hpp>
132+
129133
#endif

include/beman/execution26/detail/sender_awaitable.hpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,8 @@ class sender_awaitable {
5353
}
5454

5555
void set_stopped() && noexcept {
56-
static_cast<::std::coroutine_handle<>>(continuation_.promise().unhandled_stopped()).resume();
56+
auto handle = static_cast<::std::coroutine_handle<>>(continuation_.promise().unhandled_stopped());
57+
if (handle) handle.resume();
5758
}
5859

5960
auto get_env() const noexcept {

include/beman/execution26/detail/single_sender_value_type.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ struct single_sender_value_type_helper<Sender, Env> {
2828
template <typename Sender, typename Env>
2929
requires ::std::same_as<::std::variant<::std::tuple<>>,
3030
::beman::execution26::value_types_of_t<Sender, Env, ::std::tuple, ::std::variant>>
31+
|| ::std::same_as<::std::variant<>,
32+
::beman::execution26::value_types_of_t<Sender, Env, ::std::tuple, ::std::variant>>
3133
struct single_sender_value_type_helper<Sender, Env> {
3234
using type = void;
3335
};

tests/beman/execution26/execution-syn.test.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -225,18 +225,18 @@ auto test_single_sender_value_type() -> void {
225225
test_detail::single_sender_value_type<multi_type_sender, test_std::empty_env>>);
226226
test_single_sender_value_type<true>(single_type_sender{}, test_std::empty_env{});
227227
test_single_sender_value_type<true>(single_type_sender{}, test_env{});
228-
test_single_sender_value_type<false>(single_type_sender{}, no_value_env{});
228+
test_single_sender_value_type<true>(single_type_sender{}, no_value_env{});
229229
test_single_sender_value_type<false>(multi_single_sender{}, test_std::empty_env{});
230-
test_single_sender_value_type<false>(no_value_sender{}, test_std::empty_env{});
230+
test_single_sender_value_type<true>(no_value_sender{}, test_std::empty_env{});
231231
}
232232

233233
auto test_single_sender() -> void {
234234
static_assert(test_detail::single_sender<single_type_sender, test_std::empty_env>);
235-
static_assert(not test_detail::single_sender<single_type_sender, no_value_env>);
235+
static_assert(test_detail::single_sender<single_type_sender, no_value_env>);
236236
static_assert(test_detail::single_sender<void_sender, test_std::empty_env>);
237237
static_assert(not test_detail::single_sender<multi_single_sender, test_std::empty_env>);
238238
static_assert(test_detail::single_sender<multi_type_sender, test_std::empty_env>);
239-
static_assert(not test_detail::single_sender<no_value_sender, test_std::empty_env>);
239+
static_assert(test_detail::single_sender<no_value_sender, test_std::empty_env>);
240240
}
241241

242242
struct connect_sender {

0 commit comments

Comments
 (0)