![]()  | 
Home | Libraries | People | FAQ | More | 
A customisation point that connects a sender to a receiver.
constexpr unspecified connect = unspecified;
        The name execution::connect denotes a customisation point object.
        For some subexpressions s
        and r, let S be a type such that decltype((s))
        is S and let R be a type such that decltype((r))
        is R. The expression execution::connect(s, r) is expression-equivalent to:
      
s.connect(r),
            if that expression is valid, if its type satisfies operation_state,
            and if S satisfies sender.
          connect(s, r),
            if that expression is valid, if its type satisfies operation_state,
            and if S satisfies sender, with overload resolution performed
            in a context that includes the declaration void
            connect();
            and that does not include a declaration of execution::connect.
          
            Otherwise, as_operation{s, r}, if r
            is not an instance of as_receiver<F, S> for some type F,
            and if receiver_of<R> && executor_of<remove_cvref_t<S>, as_invocable<remove_cvref_t<R>, S>> is true,
            where as_operation is
            an implementation-defined class equivalent to
          
template <class S, class R> struct as_operation { remove_cvref_t<S> e_; remove_cvref_t<R> r_; void start() noexcept try { execution::execute(std::move(e_), as_invocable<remove_cvref_t<R>, S>{r_}); } catch(...) { execution::set_error(std::move(r_), current_exception()); } };
        and as_invocable is a class
        template equivalent to the following:
      
template<class R> struct as_invocable { R* r_; explicit as_invocable(R& r) noexcept : r_(std::addressof(r)) {} as_invocable(as_invocable && other) noexcept : r_(std::exchange(other.r_, nullptr)) {} ~as_invocable() { if(r_) execution::set_done(std::move(*r_)); } void operator()() & noexcept try { execution::set_value(std::move(*r_)); r_ = nullptr; } catch(...) { execution::set_error(std::move(*r_), current_exception()); r_ = nullptr; } };
execution::connect(s, r) is ill-formed.
          
        Header: boost/asio/execution/connect.hpp
      
        Convenience header: boost/asio/execution.hpp