diff --git a/include/stdexec/__detail/__task_scheduler.hpp b/include/stdexec/__detail/__task_scheduler.hpp index 476a2591d..5d002ddba 100644 --- a/include/stdexec/__detail/__task_scheduler.hpp +++ b/include/stdexec/__detail/__task_scheduler.hpp @@ -846,14 +846,15 @@ namespace STDEXEC { if (__value_type == __mtypeid) { - auto& __val = *static_cast*>(__dest); if constexpr (__callable>) { - __val.emplace(get_start_scheduler(get_env(__rcvr_))); - } - else - { - __val.emplace(inline_scheduler{}); + if constexpr (__std::constructible_from< + task_scheduler, + __call_result_t>>) + { + auto& __val = *static_cast*>(__dest); + __val.emplace(get_start_scheduler(get_env(__rcvr_))); + } } } } diff --git a/test/stdexec/schedulers/test_parallel_scheduler.cpp b/test/stdexec/schedulers/test_parallel_scheduler.cpp index 76bf85cc6..f01ea2ce6 100644 --- a/test/stdexec/schedulers/test_parallel_scheduler.cpp +++ b/test/stdexec/schedulers/test_parallel_scheduler.cpp @@ -94,6 +94,13 @@ TEST_CASE("trivial schedule task on parallel scheduler", "[scheduler][parallel_s ex::sync_wait(ex::schedule(sched)); } +TEST_CASE("can schedule from parallel scheduler to parallel scheduler", + "[scheduler][parallel_scheduler]") +{ + auto sched = ex::get_parallel_scheduler(); + ex::sync_wait(ex::starts_on(sched, ex::starts_on(sched, ex::just()))); +} + TEST_CASE("simple schedule task on parallel scheduler", "[scheduler][parallel_scheduler]") { std::thread::id this_id = std::this_thread::get_id();