|
21 | 21 |
|
22 | 22 | #include "env.hpp" |
23 | 23 |
|
24 | | -#include <cstddef> |
25 | 24 | #include <utility> |
26 | 25 |
|
27 | 26 | STDEXEC_PRAGMA_PUSH() |
@@ -602,10 +601,8 @@ namespace experimental::execution |
602 | 601 | struct _any_receiver_ref |
603 | 602 | : __pointer_receiver<typename _any::_ireceiver<Sigs, Queries>::_pointer_t> |
604 | 603 | { |
605 | | - // TODO: make sure that passing an any_receiver to this constructor does not cause |
606 | | - // double indirections. |
607 | | - template <__not_same_as<_any_receiver_ref> Receiver> |
608 | | - requires receiver_of<Receiver, Sigs> |
| 604 | + template <__not_decays_to<_any_receiver_ref> Receiver> |
| 605 | + requires STDEXEC::receiver_of<Receiver, Sigs> |
609 | 606 | constexpr _any_receiver_ref(Receiver &_rcvr) noexcept |
610 | 607 | : _any_receiver_ref::__pointer_receiver(std::addressof(_rcvr)) |
611 | 608 | {} |
@@ -724,11 +721,17 @@ namespace experimental::execution |
724 | 721 | any_receiver_ref<STDEXEC::completion_signatures<Sigs...>, Queries...> |
725 | 722 | : _any::_any_receiver_ref<STDEXEC::completion_signatures<Sigs...>, _any::_queries_t<Queries...>> |
726 | 723 | { |
| 724 | + private: |
727 | 725 | using _any_receiver_t = |
728 | 726 | any_receiver<STDEXEC::completion_signatures<Sigs...>, _any::_queries_t<Queries...>>; |
729 | 727 | using _base_t = _any::_any_receiver_ref<STDEXEC::completion_signatures<Sigs...>, |
730 | 728 | _any::_queries_t<Queries...>>; |
731 | | - using _base_t::_base_t; |
| 729 | + public: |
| 730 | + template <STDEXEC::__not_decays_to<any_receiver_ref> Receiver> |
| 731 | + requires STDEXEC::receiver_of<Receiver, STDEXEC::completion_signatures<Sigs...>> |
| 732 | + constexpr any_receiver_ref(Receiver &_rcvr) noexcept |
| 733 | + : _base_t{static_cast<Receiver &>(_rcvr)} |
| 734 | + {} |
732 | 735 |
|
733 | 736 | template <auto... SenderQueries> |
734 | 737 | struct [[deprecated("use exec::any_sender<exec::any_receiver<Sigs, ReceiverQueries>, " |
|
0 commit comments