|
22 | 22 | #include "__connect.hpp" |
23 | 23 | #include "__diagnostics.hpp" |
24 | 24 | #include "__env.hpp" |
| 25 | +#include "__memory.hpp" |
25 | 26 | #include "__meta.hpp" |
26 | 27 | #include "__operation_states.hpp" |
27 | 28 | #include "__receivers.hpp" |
@@ -104,6 +105,14 @@ namespace STDEXEC |
104 | 105 | using __receiver_t = _Receiver; |
105 | 106 | using __data_t = _Data; |
106 | 107 |
|
| 108 | + template <class _CvData> |
| 109 | + STDEXEC_ATTRIBUTE(host, device) |
| 110 | + constexpr __state(_Receiver __rcvr, _CvData&& __data) |
| 111 | + noexcept(__nothrow_decay_copyable<_CvData>) |
| 112 | + : __rcvr_(static_cast<_Receiver&&>(__rcvr)) |
| 113 | + , __data_(STDEXEC::__allocator_aware_forward(static_cast<_CvData&&>(__data), __rcvr_)) |
| 114 | + { } |
| 115 | + |
107 | 116 | STDEXEC_IMMOVABLE_NO_UNIQUE_ADDRESS |
108 | 117 | _Receiver __rcvr_; |
109 | 118 | STDEXEC_IMMOVABLE_NO_UNIQUE_ADDRESS |
@@ -160,17 +169,17 @@ namespace STDEXEC |
160 | 169 | STDEXEC::__get<1>(static_cast<_Sender&&>(__sndr))}; |
161 | 170 | }; |
162 | 171 |
|
163 | | - static constexpr auto __get_env = // |
164 | | - []<class _State>(__ignore, |
165 | | - _State const & __state) noexcept -> env_of_t<decltype(_State::__rcvr_)> |
| 172 | + static constexpr auto __get_env = // |
| 173 | + []<class _State>(__ignore, _State const & __state) noexcept // |
| 174 | + -> env_of_t<decltype(_State::__rcvr_)> |
166 | 175 | { |
167 | 176 | return STDEXEC::get_env(__state.__rcvr_); |
168 | 177 | }; |
169 | 178 |
|
170 | 179 | static constexpr auto __connect = // |
171 | 180 | []<class _Receiver, __connectable_to<_Receiver> _Sender>(_Sender&& __sndr, |
172 | | - _Receiver&& __rcvr) // |
173 | | - noexcept(__nothrow_constructible_from<__opstate<_Sender, _Receiver>, _Sender, _Receiver>) |
| 181 | + _Receiver&& __rcvr) noexcept( // |
| 182 | + __nothrow_constructible_from<__opstate<_Sender, _Receiver>, _Sender, _Receiver>) |
174 | 183 | -> __opstate<_Sender, _Receiver> |
175 | 184 | { |
176 | 185 | return __opstate<_Sender, _Receiver>(static_cast<_Sender&&>(__sndr), |
|
0 commit comments