11 #include <so_5_extra/error_ranges.hpp> 13 #include <so_5/send_functions.hpp> 15 #include <so_5/details/always_false.hpp> 56 template<
typename T >
62 template<
typename T >
66 "so_5::immutable_msg<T> modificator can't be used with " 67 "so_5::extra::sync::request_reply_t" );
70 template<
typename T >
74 "so_5::mutable_msg<T> modificator can't be used with " 75 "so_5::extra::sync::request_reply_t" );
81 template<
typename T >
82 using ensure_no_mutability_modificators_t =
111 class reply_target_holder_t
final 123 struct closer_t
final {
124 void operator()(
const mchain_t & ch )
const noexcept {
128 close_retain_content( ch );
130 void operator()(
const mbox_t & )
const noexcept {
135 std::visit( closer_t{}, m_target );
143 target()
const noexcept {
return m_target; }
160 mbox_t operator()(
const mchain_t & ch )
const noexcept {
161 return ch->as_mbox();
163 mbox_t operator()(
const mbox_t & mbox )
const noexcept {
168 return std::visit( extractor_t{}, rt );
177 template<
typename Request,
typename Reply >
198 "Reply type should be MoveAssignable or CopyAssignable" );
225 template<
typename Base,
bool is_signal >
226 class request_holder_part_t;
235 template<
typename Base >
236 class request_holder_part_t<Base,
false> :
public Base
243 template<
typename... Args >
245 reply_target_t reply_target,
247 : Base{ std::move(reply_target) }
248 , m_request{ std::forward<Args>(args)... }
266 template<
typename Base >
267 class request_holder_part_t<Base,
true> :
public Base
567 template<
typename Request,
typename Reply>
667 template<
typename Reply_Receiver >
671 Reply_Receiver & result )
708 std::
string{
"no reply received, request_reply type: " } +
735 std::
string{
"no reply received, request_reply type: " } +
942 template<
typename...
Args >
948 std::
string{
"reply has already been sent, " 949 "request_reply type: " } +
1094 template<
typename Request,
typename Reply >
1103 template<
typename Request,
typename Reply >
Ranges for error codes of each submodules.