Invoke completion handlers as rvalue references.
diff --git a/asio/include/asio/detail/bind_handler.hpp b/asio/include/asio/detail/bind_handler.hpp
index 7151050..1b13235 100644
--- a/asio/include/asio/detail/bind_handler.hpp
+++ b/asio/include/asio/detail/bind_handler.hpp
@@ -28,6 +28,113 @@
namespace asio {
namespace detail {
+template <typename Handler>
+class binder0
+{
+public:
+ template <typename T>
+ binder0(int, ASIO_MOVE_ARG(T) handler)
+ : handler_(ASIO_MOVE_CAST(T)(handler))
+ {
+ }
+
+ binder0(Handler& handler)
+ : handler_(ASIO_MOVE_CAST(Handler)(handler))
+ {
+ }
+
+#if defined(ASIO_HAS_MOVE)
+ binder0(const binder0& other)
+ : handler_(other.handler_)
+ {
+ }
+
+ binder0(binder0&& other)
+ : handler_(ASIO_MOVE_CAST(Handler)(other.handler_))
+ {
+ }
+#endif // defined(ASIO_HAS_MOVE)
+
+ void operator()()
+ {
+ ASIO_MOVE_CAST(Handler)(handler_)();
+ }
+
+ void operator()() const
+ {
+ handler_();
+ }
+
+//private:
+ Handler handler_;
+};
+
+template <typename Handler>
+inline asio_handler_allocate_is_deprecated
+asio_handler_allocate(std::size_t size,
+ binder0<Handler>* this_handler)
+{
+#if defined(ASIO_NO_DEPRECATED)
+ asio_handler_alloc_helpers::allocate(size, this_handler->handler_);
+ return asio_handler_allocate_is_no_longer_used();
+#else // defined(ASIO_NO_DEPRECATED)
+ return asio_handler_alloc_helpers::allocate(
+ size, this_handler->handler_);
+#endif // defined(ASIO_NO_DEPRECATED)
+}
+
+template <typename Handler>
+inline asio_handler_deallocate_is_deprecated
+asio_handler_deallocate(void* pointer, std::size_t size,
+ binder0<Handler>* this_handler)
+{
+ asio_handler_alloc_helpers::deallocate(
+ pointer, size, this_handler->handler_);
+#if defined(ASIO_NO_DEPRECATED)
+ return asio_handler_deallocate_is_no_longer_used();
+#endif // defined(ASIO_NO_DEPRECATED)
+}
+
+template <typename Handler>
+inline bool asio_handler_is_continuation(
+ binder0<Handler>* this_handler)
+{
+ return asio_handler_cont_helpers::is_continuation(
+ this_handler->handler_);
+}
+
+template <typename Function, typename Handler>
+inline asio_handler_invoke_is_deprecated
+asio_handler_invoke(Function& function,
+ binder0<Handler>* this_handler)
+{
+ asio_handler_invoke_helpers::invoke(
+ function, this_handler->handler_);
+#if defined(ASIO_NO_DEPRECATED)
+ return asio_handler_invoke_is_no_longer_used();
+#endif // defined(ASIO_NO_DEPRECATED)
+}
+
+template <typename Function, typename Handler>
+inline asio_handler_invoke_is_deprecated
+asio_handler_invoke(const Function& function,
+ binder0<Handler>* this_handler)
+{
+ asio_handler_invoke_helpers::invoke(
+ function, this_handler->handler_);
+#if defined(ASIO_NO_DEPRECATED)
+ return asio_handler_invoke_is_no_longer_used();
+#endif // defined(ASIO_NO_DEPRECATED)
+}
+
+template <typename Handler>
+inline binder0<typename decay<Handler>::type> bind_handler(
+ ASIO_MOVE_ARG(Handler) handler)
+{
+ return binder0<typename decay<Handler>::type>(
+ 0, ASIO_MOVE_CAST(Handler)(handler));
+}
+
template <typename Handler, typename Arg1>
class binder1
{
@@ -61,7 +168,7 @@
void operator()()
{
- handler_(static_cast<const Arg1&>(arg1_));
+ ASIO_MOVE_CAST(Handler)(handler_)(static_cast<const Arg1&>(arg1_));
}
void operator()() const
@@ -178,7 +285,7 @@
void operator()()
{
- handler_(static_cast<const Arg1&>(arg1_),
+ ASIO_MOVE_CAST(Handler)(handler_)(static_cast<const Arg1&>(arg1_),
static_cast<const Arg2&>(arg2_));
}
@@ -302,7 +409,7 @@
void operator()()
{
- handler_(static_cast<const Arg1&>(arg1_),
+ ASIO_MOVE_CAST(Handler)(handler_)(static_cast<const Arg1&>(arg1_),
static_cast<const Arg2&>(arg2_), static_cast<const Arg3&>(arg3_));
}
@@ -435,7 +542,7 @@
void operator()()
{
- handler_(static_cast<const Arg1&>(arg1_),
+ ASIO_MOVE_CAST(Handler)(handler_)(static_cast<const Arg1&>(arg1_),
static_cast<const Arg2&>(arg2_), static_cast<const Arg3&>(arg3_),
static_cast<const Arg4&>(arg4_));
}
@@ -578,7 +685,7 @@
void operator()()
{
- handler_(static_cast<const Arg1&>(arg1_),
+ ASIO_MOVE_CAST(Handler)(handler_)(static_cast<const Arg1&>(arg1_),
static_cast<const Arg2&>(arg2_), static_cast<const Arg3&>(arg3_),
static_cast<const Arg4&>(arg4_), static_cast<const Arg5&>(arg5_));
}
@@ -691,7 +798,8 @@
void operator()()
{
- handler_(ASIO_MOVE_CAST(Arg1)(arg1_));
+ ASIO_MOVE_CAST(Handler)(handler_)(
+ ASIO_MOVE_CAST(Arg1)(arg1_));
}
//private:
@@ -766,7 +874,7 @@
void operator()()
{
- handler_(static_cast<const Arg1&>(arg1_),
+ ASIO_MOVE_CAST(Handler)(handler_)(static_cast<const Arg1&>(arg1_),
ASIO_MOVE_CAST(Arg2)(arg2_));
}
diff --git a/asio/include/asio/detail/work_dispatcher.hpp b/asio/include/asio/detail/work_dispatcher.hpp
index 836605f..9ece501 100644
--- a/asio/include/asio/detail/work_dispatcher.hpp
+++ b/asio/include/asio/detail/work_dispatcher.hpp
@@ -16,6 +16,7 @@
#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
#include "asio/detail/config.hpp"
+#include "asio/detail/bind_handler.hpp"
#include "asio/detail/type_traits.hpp"
#include "asio/associated_executor.hpp"
#include "asio/associated_allocator.hpp"
@@ -81,7 +82,8 @@
asio::prefer(executor_,
execution::blocking.possibly,
execution::allocator((get_associated_allocator)(handler_))),
- ASIO_MOVE_CAST(Handler)(handler_));
+ asio::detail::bind_handler(
+ ASIO_MOVE_CAST(Handler)(handler_)));
}
private:
@@ -129,7 +131,8 @@
typename associated_allocator<Handler>::type alloc(
(get_associated_allocator)(handler_));
work_.get_executor().dispatch(
- ASIO_MOVE_CAST(Handler)(handler_), alloc);
+ asio::detail::bind_handler(
+ ASIO_MOVE_CAST(Handler)(handler_)), alloc);
work_.reset();
}
diff --git a/asio/include/asio/impl/buffered_read_stream.hpp b/asio/include/asio/impl/buffered_read_stream.hpp
index 808dc0b..695a2b1 100644
--- a/asio/include/asio/impl/buffered_read_stream.hpp
+++ b/asio/include/asio/impl/buffered_read_stream.hpp
@@ -91,7 +91,7 @@
const std::size_t bytes_transferred)
{
storage_.resize(previous_size_ + bytes_transferred);
- handler_(ec, bytes_transferred);
+ ASIO_MOVE_CAST(ReadHandler)(handler_)(ec, bytes_transferred);
}
//private:
@@ -313,14 +313,14 @@
if (ec || storage_.empty())
{
const std::size_t length = 0;
- handler_(ec, length);
+ ASIO_MOVE_CAST(ReadHandler)(handler_)(ec, length);
}
else
{
const std::size_t bytes_copied = asio::buffer_copy(
buffers_, storage_.data(), storage_.size());
storage_.consume(bytes_copied);
- handler_(ec, bytes_copied);
+ ASIO_MOVE_CAST(ReadHandler)(handler_)(ec, bytes_copied);
}
}
diff --git a/asio/include/asio/impl/buffered_write_stream.hpp b/asio/include/asio/impl/buffered_write_stream.hpp
index 4dfecda..bc83cc3 100644
--- a/asio/include/asio/impl/buffered_write_stream.hpp
+++ b/asio/include/asio/impl/buffered_write_stream.hpp
@@ -77,7 +77,7 @@
const std::size_t bytes_written)
{
storage_.consume(bytes_written);
- handler_(ec, bytes_written);
+ ASIO_MOVE_CAST(WriteHandler)(handler_)(ec, bytes_written);
}
//private:
@@ -293,7 +293,7 @@
if (ec)
{
const std::size_t length = 0;
- handler_(ec, length);
+ ASIO_MOVE_CAST(WriteHandler)(handler_)(ec, length);
}
else
{
@@ -306,7 +306,7 @@
storage_.resize(orig_size + length);
const std::size_t bytes_copied = asio::buffer_copy(
storage_.data() + orig_size, buffers_, length);
- handler_(ec, bytes_copied);
+ ASIO_MOVE_CAST(WriteHandler)(handler_)(ec, bytes_copied);
}
}
diff --git a/asio/include/asio/impl/co_spawn.hpp b/asio/include/asio/impl/co_spawn.hpp
index 0283507..3f0a9f8 100644
--- a/asio/include/asio/impl/co_spawn.hpp
+++ b/asio/include/asio/impl/co_spawn.hpp
@@ -96,7 +96,7 @@
(dispatch)(handler_work.get_executor(),
[handler = std::move(handler), t = std::move(t)]() mutable
{
- handler(std::exception_ptr(), std::move(t));
+ std::move(handler)(std::exception_ptr(), std::move(t));
});
}
catch (...)
@@ -107,7 +107,7 @@
(dispatch)(handler_work.get_executor(),
[handler = std::move(handler), e = std::current_exception()]() mutable
{
- handler(e, T());
+ std::move(handler)(e, T());
});
}
}
@@ -136,7 +136,7 @@
(dispatch)(handler_work.get_executor(),
[handler = std::move(handler), e]() mutable
{
- handler(e);
+ std::move(handler)(e);
});
}
diff --git a/asio/include/asio/impl/compose.hpp b/asio/include/asio/impl/compose.hpp
index cd0f0fa..0ec3a69 100644
--- a/asio/include/asio/impl/compose.hpp
+++ b/asio/include/asio/impl/compose.hpp
@@ -348,7 +348,8 @@
void complete(Args... args)
{
this->work_.reset();
- this->handler_(ASIO_MOVE_CAST(Args)(args)...);
+ ASIO_MOVE_CAST(Handler)(this->handler_)(
+ ASIO_MOVE_CAST(Args)(args)...);
}
#else // defined(ASIO_HAS_VARIADIC_TEMPLATES)
@@ -363,7 +364,7 @@
void complete()
{
this->work_.reset();
- this->handler_();
+ ASIO_MOVE_CAST(Handler)(this->handler_)();
}
#define ASIO_PRIVATE_COMPOSED_OP_DEF(n) \
@@ -379,7 +380,8 @@
void complete(ASIO_VARIADIC_MOVE_PARAMS(n)) \
{ \
this->work_.reset(); \
- this->handler_(ASIO_VARIADIC_MOVE_ARGS(n)); \
+ ASIO_MOVE_CAST(Handler)(this->handler_)( \
+ ASIO_VARIADIC_MOVE_ARGS(n)); \
} \
/**/
ASIO_VARIADIC_GENERATE(ASIO_PRIVATE_COMPOSED_OP_DEF)
diff --git a/asio/include/asio/impl/connect.hpp b/asio/include/asio/impl/connect.hpp
index e4614b4..95ce95c 100644
--- a/asio/include/asio/impl/connect.hpp
+++ b/asio/include/asio/impl/connect.hpp
@@ -392,7 +392,8 @@
++index_;
}
- handler_(static_cast<const asio::error_code&>(ec),
+ ASIO_MOVE_CAST(RangeConnectHandler)(handler_)(
+ static_cast<const asio::error_code&>(ec),
static_cast<const typename Protocol::endpoint&>(
ec || iter == end ? typename Protocol::endpoint() : *iter));
}
@@ -598,7 +599,8 @@
++iter_;
}
- handler_(static_cast<const asio::error_code&>(ec),
+ ASIO_MOVE_CAST(IteratorConnectHandler)(handler_)(
+ static_cast<const asio::error_code&>(ec),
static_cast<const Iterator&>(iter_));
}
}
diff --git a/asio/include/asio/impl/defer.hpp b/asio/include/asio/impl/defer.hpp
index 5bf98bd..129d868 100644
--- a/asio/include/asio/impl/defer.hpp
+++ b/asio/include/asio/impl/defer.hpp
@@ -56,7 +56,8 @@
asio::require(ex, execution::blocking.never),
execution::relationship.continuation,
execution::allocator(alloc)),
- ASIO_MOVE_CAST(CompletionHandler)(handler));
+ asio::detail::bind_handler(
+ ASIO_MOVE_CAST(CompletionHandler)(handler)));
}
template <typename CompletionHandler>
@@ -77,7 +78,8 @@
typename associated_allocator<handler_t>::type alloc(
(get_associated_allocator)(handler));
- ex.defer(ASIO_MOVE_CAST(CompletionHandler)(handler), alloc);
+ ex.defer(asio::detail::bind_handler(
+ ASIO_MOVE_CAST(CompletionHandler)(handler)), alloc);
}
};
@@ -121,7 +123,8 @@
asio::require(ex_, execution::blocking.never),
execution::relationship.continuation,
execution::allocator(alloc)),
- ASIO_MOVE_CAST(CompletionHandler)(handler));
+ asio::detail::bind_handler(
+ ASIO_MOVE_CAST(CompletionHandler)(handler)));
}
template <typename CompletionHandler>
@@ -175,7 +178,8 @@
typename associated_allocator<handler_t>::type alloc(
(get_associated_allocator)(handler));
- ex_.defer(ASIO_MOVE_CAST(CompletionHandler)(handler), alloc);
+ ex_.defer(asio::detail::bind_handler(
+ ASIO_MOVE_CAST(CompletionHandler)(handler)), alloc);
}
template <typename CompletionHandler>
diff --git a/asio/include/asio/impl/dispatch.hpp b/asio/include/asio/impl/dispatch.hpp
index e5c55a2..b602f6f 100644
--- a/asio/include/asio/impl/dispatch.hpp
+++ b/asio/include/asio/impl/dispatch.hpp
@@ -53,7 +53,8 @@
asio::prefer(ex,
execution::blocking.possibly,
execution::allocator(alloc)),
- ASIO_MOVE_CAST(CompletionHandler)(handler));
+ asio::detail::bind_handler(
+ ASIO_MOVE_CAST(CompletionHandler)(handler)));
}
template <typename CompletionHandler>
@@ -74,7 +75,8 @@
typename associated_allocator<handler_t>::type alloc(
(get_associated_allocator)(handler));
- ex.dispatch(ASIO_MOVE_CAST(CompletionHandler)(handler), alloc);
+ ex.dispatch(asio::detail::bind_handler(
+ ASIO_MOVE_CAST(CompletionHandler)(handler)), alloc);
}
};
@@ -117,7 +119,8 @@
asio::prefer(ex_,
execution::blocking.possibly,
execution::allocator(alloc)),
- ASIO_MOVE_CAST(CompletionHandler)(handler));
+ asio::detail::bind_handler(
+ ASIO_MOVE_CAST(CompletionHandler)(handler)));
}
template <typename CompletionHandler>
@@ -170,7 +173,8 @@
typename associated_allocator<handler_t>::type alloc(
(get_associated_allocator)(handler));
- ex_.dispatch(ASIO_MOVE_CAST(CompletionHandler)(handler), alloc);
+ ex_.dispatch(asio::detail::bind_handler(
+ ASIO_MOVE_CAST(CompletionHandler)(handler)), alloc);
}
template <typename CompletionHandler>
diff --git a/asio/include/asio/impl/post.hpp b/asio/include/asio/impl/post.hpp
index 90b781f..ec96a6c 100644
--- a/asio/include/asio/impl/post.hpp
+++ b/asio/include/asio/impl/post.hpp
@@ -56,7 +56,8 @@
asio::require(ex, execution::blocking.never),
execution::relationship.fork,
execution::allocator(alloc)),
- ASIO_MOVE_CAST(CompletionHandler)(handler));
+ asio::detail::bind_handler(
+ ASIO_MOVE_CAST(CompletionHandler)(handler)));
}
template <typename CompletionHandler>
@@ -77,7 +78,8 @@
typename associated_allocator<handler_t>::type alloc(
(get_associated_allocator)(handler));
- ex.post(ASIO_MOVE_CAST(CompletionHandler)(handler), alloc);
+ ex.post(asio::detail::bind_handler(
+ ASIO_MOVE_CAST(CompletionHandler)(handler)), alloc);
}
};
@@ -121,7 +123,8 @@
asio::require(ex_, execution::blocking.never),
execution::relationship.fork,
execution::allocator(alloc)),
- ASIO_MOVE_CAST(CompletionHandler)(handler));
+ asio::detail::bind_handler(
+ ASIO_MOVE_CAST(CompletionHandler)(handler)));
}
template <typename CompletionHandler>
@@ -175,7 +178,8 @@
typename associated_allocator<handler_t>::type alloc(
(get_associated_allocator)(handler));
- ex_.post(ASIO_MOVE_CAST(CompletionHandler)(handler), alloc);
+ ex_.post(asio::detail::bind_handler(
+ ASIO_MOVE_CAST(CompletionHandler)(handler)), alloc);
}
template <typename CompletionHandler>
diff --git a/asio/include/asio/impl/read.hpp b/asio/include/asio/impl/read.hpp
index 4340453..3f7ffe7 100644
--- a/asio/include/asio/impl/read.hpp
+++ b/asio/include/asio/impl/read.hpp
@@ -381,7 +381,8 @@
max_size = this->check_for_completion(ec, buffers_.total_consumed());
} while (max_size > 0);
- handler_(ec, buffers_.total_consumed());
+ ASIO_MOVE_CAST(ReadHandler)(handler_)(
+ ec, buffers_.total_consumed());
}
}
@@ -680,7 +681,8 @@
break;
}
- handler_(ec, static_cast<const std::size_t&>(total_transferred_));
+ ASIO_MOVE_CAST(ReadHandler)(handler_)(ec,
+ static_cast<const std::size_t&>(total_transferred_));
}
}
@@ -1006,7 +1008,8 @@
break;
}
- handler_(ec, static_cast<const std::size_t&>(total_transferred_));
+ ASIO_MOVE_CAST(ReadHandler)(handler_)(ec,
+ static_cast<const std::size_t&>(total_transferred_));
}
}
diff --git a/asio/include/asio/impl/read_at.hpp b/asio/include/asio/impl/read_at.hpp
index 1e3e3f8..9198144 100644
--- a/asio/include/asio/impl/read_at.hpp
+++ b/asio/include/asio/impl/read_at.hpp
@@ -239,7 +239,8 @@
max_size = this->check_for_completion(ec, buffers_.total_consumed());
} while (max_size > 0);
- handler_(ec, buffers_.total_consumed());
+ ASIO_MOVE_CAST(ReadHandler)(handler_)(
+ ec, buffers_.total_consumed());
}
}
@@ -538,7 +539,8 @@
break;
}
- handler_(ec, static_cast<const std::size_t&>(total_transferred_));
+ ASIO_MOVE_CAST(ReadHandler)(handler_)(ec,
+ static_cast<const std::size_t&>(total_transferred_));
}
}
diff --git a/asio/include/asio/impl/read_until.hpp b/asio/include/asio/impl/read_until.hpp
index 0cd312a..2dcde64 100644
--- a/asio/include/asio/impl/read_until.hpp
+++ b/asio/include/asio/impl/read_until.hpp
@@ -916,7 +916,7 @@
(ec || search_position_ == not_found)
? 0 : search_position_;
- handler_(result_ec, result_n);
+ ASIO_MOVE_CAST(ReadHandler)(handler_)(result_ec, result_n);
}
}
@@ -1225,7 +1225,7 @@
(ec || search_position_ == not_found)
? 0 : search_position_;
- handler_(result_ec, result_n);
+ ASIO_MOVE_CAST(ReadHandler)(handler_)(result_ec, result_n);
}
}
@@ -1542,7 +1542,7 @@
(ec || search_position_ == not_found)
? 0 : search_position_;
- handler_(result_ec, result_n);
+ ASIO_MOVE_CAST(ReadHandler)(handler_)(result_ec, result_n);
}
}
@@ -1852,7 +1852,7 @@
(ec || search_position_ == not_found)
? 0 : search_position_;
- handler_(result_ec, result_n);
+ ASIO_MOVE_CAST(ReadHandler)(handler_)(result_ec, result_n);
}
}
@@ -2228,7 +2228,7 @@
(ec || search_position_ == not_found)
? 0 : search_position_;
- handler_(result_ec, result_n);
+ ASIO_MOVE_CAST(ReadHandler)(handler_)(result_ec, result_n);
}
}
@@ -2540,7 +2540,7 @@
(ec || search_position_ == not_found)
? 0 : search_position_;
- handler_(result_ec, result_n);
+ ASIO_MOVE_CAST(ReadHandler)(handler_)(result_ec, result_n);
}
}
@@ -2862,7 +2862,7 @@
(ec || search_position_ == not_found)
? 0 : search_position_;
- handler_(result_ec, result_n);
+ ASIO_MOVE_CAST(ReadHandler)(handler_)(result_ec, result_n);
}
}
@@ -3176,7 +3176,7 @@
(ec || search_position_ == not_found)
? 0 : search_position_;
- handler_(result_ec, result_n);
+ ASIO_MOVE_CAST(ReadHandler)(handler_)(result_ec, result_n);
}
}
diff --git a/asio/include/asio/impl/redirect_error.hpp b/asio/include/asio/impl/redirect_error.hpp
index a6ef550..d428bc0 100644
--- a/asio/include/asio/impl/redirect_error.hpp
+++ b/asio/include/asio/impl/redirect_error.hpp
@@ -55,7 +55,7 @@
void operator()()
{
- handler_();
+ ASIO_MOVE_CAST(Handler)(handler_)();
}
#if defined(ASIO_HAS_VARIADIC_TEMPLATES)
@@ -66,7 +66,8 @@
>::type
operator()(ASIO_MOVE_ARG(Arg) arg, ASIO_MOVE_ARG(Args)... args)
{
- handler_(ASIO_MOVE_CAST(Arg)(arg),
+ ASIO_MOVE_CAST(Handler)(handler_)(
+ ASIO_MOVE_CAST(Arg)(arg),
ASIO_MOVE_CAST(Args)(args)...);
}
@@ -75,7 +76,8 @@
ASIO_MOVE_ARG(Args)... args)
{
ec_ = ec;
- handler_(ASIO_MOVE_CAST(Args)(args)...);
+ ASIO_MOVE_CAST(Handler)(handler_)(
+ ASIO_MOVE_CAST(Args)(args)...);
}
#else // defined(ASIO_HAS_VARIADIC_TEMPLATES)
@@ -86,13 +88,14 @@
>::type
operator()(ASIO_MOVE_ARG(Arg) arg)
{
- handler_(ASIO_MOVE_CAST(Arg)(arg));
+ ASIO_MOVE_CAST(Handler)(handler_)(
+ ASIO_MOVE_CAST(Arg)(arg));
}
void operator()(const asio::error_code& ec)
{
ec_ = ec;
- handler_();
+ ASIO_MOVE_CAST(Handler)(handler_)();
}
#define ASIO_PRIVATE_REDIRECT_ERROR_DEF(n) \
@@ -102,7 +105,8 @@
>::type \
operator()(ASIO_MOVE_ARG(Arg) arg, ASIO_VARIADIC_MOVE_PARAMS(n)) \
{ \
- handler_(ASIO_MOVE_CAST(Arg)(arg), \
+ ASIO_MOVE_CAST(Handler)(handler_)( \
+ ASIO_MOVE_CAST(Arg)(arg), \
ASIO_VARIADIC_MOVE_ARGS(n)); \
} \
\
@@ -111,7 +115,8 @@
ASIO_VARIADIC_MOVE_PARAMS(n)) \
{ \
ec_ = ec; \
- handler_(ASIO_VARIADIC_MOVE_ARGS(n)); \
+ ASIO_MOVE_CAST(Handler)(handler_)( \
+ ASIO_VARIADIC_MOVE_ARGS(n)); \
} \
/**/
ASIO_VARIADIC_GENERATE(ASIO_PRIVATE_REDIRECT_ERROR_DEF)
diff --git a/asio/include/asio/impl/spawn.hpp b/asio/include/asio/impl/spawn.hpp
index 7439d5f..5392195 100644
--- a/asio/include/asio/impl/spawn.hpp
+++ b/asio/include/asio/impl/spawn.hpp
@@ -354,7 +354,7 @@
(data->function_)(yield);
if (data->call_handler_)
- (data->handler_)();
+ ASIO_MOVE_CAST(Handler)(data->handler_)();
}
shared_ptr<spawn_data<Handler, Function> > data_;
diff --git a/asio/include/asio/impl/write.hpp b/asio/include/asio/impl/write.hpp
index c1a6eff..6f0eddf 100644
--- a/asio/include/asio/impl/write.hpp
+++ b/asio/include/asio/impl/write.hpp
@@ -346,7 +346,8 @@
max_size = this->check_for_completion(ec, buffers_.total_consumed());
} while (max_size > 0);
- handler_(ec, buffers_.total_consumed());
+ ASIO_MOVE_CAST(WriteHandler)(handler_)(
+ ec, buffers_.total_consumed());
}
}
@@ -617,7 +618,8 @@
ASIO_MOVE_CAST(write_dynbuf_v1_op)(*this));
return; default:
buffers_.consume(bytes_transferred);
- handler_(ec, static_cast<const std::size_t&>(bytes_transferred));
+ ASIO_MOVE_CAST(WriteHandler)(handler_)(ec,
+ static_cast<const std::size_t&>(bytes_transferred));
}
}
@@ -910,7 +912,8 @@
ASIO_MOVE_CAST(write_dynbuf_v2_op)(*this));
return; default:
buffers_.consume(bytes_transferred);
- handler_(ec, static_cast<const std::size_t&>(bytes_transferred));
+ ASIO_MOVE_CAST(WriteHandler)(handler_)(ec,
+ static_cast<const std::size_t&>(bytes_transferred));
}
}
diff --git a/asio/include/asio/impl/write_at.hpp b/asio/include/asio/impl/write_at.hpp
index e9889ef..e5062d5 100644
--- a/asio/include/asio/impl/write_at.hpp
+++ b/asio/include/asio/impl/write_at.hpp
@@ -224,7 +224,8 @@
max_size = this->check_for_completion(ec, buffers_.total_consumed());
} while (max_size > 0);
- handler_(ec, buffers_.total_consumed());
+ ASIO_MOVE_CAST(WriteHandler)(handler_)(
+ ec, buffers_.total_consumed());
}
}
@@ -481,7 +482,7 @@
const std::size_t bytes_transferred)
{
streambuf_.consume(bytes_transferred);
- handler_(ec, bytes_transferred);
+ ASIO_MOVE_CAST(WriteHandler)(handler_)(ec, bytes_transferred);
}
//private:
diff --git a/asio/include/asio/ssl/detail/buffered_handshake_op.hpp b/asio/include/asio/ssl/detail/buffered_handshake_op.hpp
index 10c87ee..768bcb7 100644
--- a/asio/include/asio/ssl/detail/buffered_handshake_op.hpp
+++ b/asio/include/asio/ssl/detail/buffered_handshake_op.hpp
@@ -56,7 +56,7 @@
const asio::error_code& ec,
const std::size_t& bytes_transferred) const
{
- handler(ec, bytes_transferred);
+ ASIO_MOVE_CAST(Handler)(handler)(ec, bytes_transferred);
}
private:
diff --git a/asio/include/asio/ssl/detail/handshake_op.hpp b/asio/include/asio/ssl/detail/handshake_op.hpp
index 7c328ef..de3b29e 100644
--- a/asio/include/asio/ssl/detail/handshake_op.hpp
+++ b/asio/include/asio/ssl/detail/handshake_op.hpp
@@ -51,7 +51,7 @@
const asio::error_code& ec,
const std::size_t&) const
{
- handler(ec);
+ ASIO_MOVE_CAST(Handler)(handler)(ec);
}
private:
diff --git a/asio/include/asio/ssl/detail/read_op.hpp b/asio/include/asio/ssl/detail/read_op.hpp
index d334a69..634ebe9 100644
--- a/asio/include/asio/ssl/detail/read_op.hpp
+++ b/asio/include/asio/ssl/detail/read_op.hpp
@@ -56,7 +56,7 @@
const asio::error_code& ec,
const std::size_t& bytes_transferred) const
{
- handler(ec, bytes_transferred);
+ ASIO_MOVE_CAST(Handler)(handler)(ec, bytes_transferred);
}
private:
diff --git a/asio/include/asio/ssl/detail/shutdown_op.hpp b/asio/include/asio/ssl/detail/shutdown_op.hpp
index 6989cc7..8f10894 100644
--- a/asio/include/asio/ssl/detail/shutdown_op.hpp
+++ b/asio/include/asio/ssl/detail/shutdown_op.hpp
@@ -51,11 +51,11 @@
// The engine only generates an eof when the shutdown notification has
// been received from the peer. This indicates that the shutdown has
// completed successfully, and thus need not be passed on to the handler.
- handler(asio::error_code());
+ ASIO_MOVE_CAST(Handler)(handler)(asio::error_code());
}
else
{
- handler(ec);
+ ASIO_MOVE_CAST(Handler)(handler)(ec);
}
}
};
diff --git a/asio/include/asio/ssl/detail/write_op.hpp b/asio/include/asio/ssl/detail/write_op.hpp
index 9d12131..02b27df 100644
--- a/asio/include/asio/ssl/detail/write_op.hpp
+++ b/asio/include/asio/ssl/detail/write_op.hpp
@@ -60,7 +60,7 @@
const asio::error_code& ec,
const std::size_t& bytes_transferred) const
{
- handler(ec, bytes_transferred);
+ ASIO_MOVE_CAST(Handler)(handler)(ec, bytes_transferred);
}
private: