typename detail::deduce_output_type< detail::type_list<Sigs...>, detail::type_list< typename detail::implicit_conversions< typename std::decay<Ts>::type >::type... > >::delegated_type delegate(message_priority mp, const typed_actor<Sigs...>& dest, Ts&&... xs) { static_assert(sizeof...(Ts) > 0, "no message to send"); using token = detail::type_list< typename detail::implicit_conversions< typename std::decay<Ts>::type >::type...>; token tk; check_typed_input(dest, tk); if (! dest) return {}; auto mid = current_element_->mid; current_element_->mid = mp == message_priority::high ? mid.with_high_priority() : mid.with_normal_priority(); current_element_->msg = make_message(std::forward<Ts>(xs)...); dest->enqueue(std::move(current_element_), host()); return {}; }
void delegate(message_priority mp, const actor& dest, Ts&&... xs) { static_assert(sizeof...(Ts) > 0, "no message to send"); if (! dest) return; auto mid = current_element_->mid; current_element_->mid = mp == message_priority::high ? mid.with_high_priority() : mid.with_normal_priority(); current_element_->msg = make_message(std::forward<Ts>(xs)...); dest->enqueue(std::move(current_element_), host()); }
typename response_type< typename Handle::signatures, detail::implicit_conversions_t<typename std::decay<Ts>::type>... >::delegated_type delegate(const Handle& dest, Ts&&... xs) { static_assert(sizeof...(Ts) > 0, "nothing to delegate"); using token = detail::type_list< typename detail::implicit_conversions< typename std::decay<Ts>::type >::type...>; static_assert(response_type_unbox<signatures_of_t<Handle>, token>::valid, "receiver does not accept given message"); auto mid = current_element_->mid; current_element_->mid = P == message_priority::high ? mid.with_high_priority() : mid.with_normal_priority(); dest->enqueue(make_mailbox_element(std::move(current_element_->sender), mid, std::move(current_element_->stages), std::forward<Ts>(xs)...), context()); return {}; }