@@ -123,13 +123,36 @@ auto test_let_value_env() -> void {
123123 ex::then ([](auto s) { static_assert (ex::scheduler<decltype (s)>); }));
124124}
125125
126+ struct all_receiver {
127+ using receiver_concept = test_std::receiver_t ;
128+ auto set_value (auto &&...) && noexcept {}
129+ auto set_error (auto &&) && noexcept {}
130+ auto set_stopped () && noexcept {}
131+ };
132+
126133auto test_completion_signatures () -> void {
127134 test_std::sync_wait (
128135 test::completion_test (test_std::just () | test_std::let_value ([]() { return test_std::just (); })));
129136 test_std::sync_wait (
130137 test::completion_test (test_std::just () | test_std::let_value ([]() noexcept { return test_std::just (); })));
131138 test_std::sync_wait (test::completion_test (
132139 test_std::just () | test_std::let_value ([]() noexcept { return test_std::just_error (std::exception_ptr{}); })));
140+
141+ test_std::sync_wait (
142+ test::completion_test (test_std::let_value (test_std::just (), []() noexcept { return test_std::just (); })));
143+ static_assert (std::is_nothrow_move_constructible_v<decltype (test_std::just () | test_std::then ([]() noexcept {}))>);
144+ static_assert (
145+ requires { test_std::connect (test_std::just () | test_std::then ([]() noexcept {}), all_receiver{}); });
146+ static_assert (noexcept (all_receiver{}));
147+ static_assert (noexcept (test_std::just ()));
148+ static_assert (noexcept (test_std::just ().connect (all_receiver{})));
149+ static_assert (noexcept (test_std::connect (test_std::just (), all_receiver{})));
150+ static_assert (noexcept (ex::then (test_std::just (), []() noexcept {})));
151+ static_assert (noexcept (test_std::just () | ex::then ([]() noexcept {})));
152+ static_assert (noexcept ((test_std::just () | test_std::then ([]() noexcept {})).connect (all_receiver{})));
153+ static_assert (noexcept (test_std::connect (test_std::just () | test_std::then ([]() noexcept {}), all_receiver{})));
154+ test_std::sync_wait (test::completion_test (test_std::let_value (
155+ test_std::just (), []() noexcept { return test_std::just () | test_std::then ([]() noexcept {}); })));
133156}
134157} // namespace
135158
0 commit comments