@@ -123,13 +123,42 @@ 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 (test::completion_test (test_std::let_value (
142+ test_std::just (),
143+ []() noexcept { return test_std::just (); })));
144+ static_assert (
145+ std::is_nothrow_move_constructible_v<decltype (test_std::just () | test_std::then ([]() noexcept {}))>);
146+ static_assert (
147+ requires {test_std::connect (test_std::just () | test_std::then ([]() noexcept {}), all_receiver{}); });
148+ static_assert (noexcept (all_receiver{}));
149+ static_assert (noexcept (test_std::just ()));
150+ static_assert (noexcept (test_std::just ().connect (all_receiver{})));
151+ static_assert (
152+ noexcept (test_std::connect (test_std::just (), all_receiver{})));
153+ static_assert (noexcept (ex::then (test_std::just (), []() noexcept {})));
154+ static_assert (noexcept (test_std::just () | ex::then ([]() noexcept {})));
155+ static_assert (
156+ noexcept ((test_std::just () | test_std::then ([]() noexcept {})).connect (all_receiver{})));
157+ static_assert (
158+ noexcept (test_std::connect (test_std::just () | test_std::then ([]() noexcept {}), all_receiver{})));
159+ test_std::sync_wait (test::completion_test (test_std::let_value (
160+ test_std::just (),
161+ []() noexcept { return test_std::just () | test_std::then ([]() noexcept {}); })));
133162}
134163} // namespace
135164
0 commit comments