Subject: [Boost-bugs] [Boost C++ Libraries] #8714: Allow move-only handlers
From: Boost C++ Libraries (noreply_at_[hidden])
Date: 2013-06-20 10:42:15
#8714: Allow move-only handlers
---------------------------------+----------------------------
Reporter: Marton <marton78@â¦> | Owner: chris_kohlhoff
Type: Feature Requests | Status: new
Milestone: To Be Determined | Component: asio
Version: Boost 1.53.0 | Severity: Problem
Keywords: |
---------------------------------+----------------------------
(See also http://stackoverflow.com/questions/17211263)
The requirement that handlers be copy constructible doesn't allow for the
following idiom:
{{{
void connection::send_response()
{
// block until previous response is sent
std::unique_lock<std::mutex> locker(response_mutex_);
// prepare response
response_ = "foo";
// send response back to caller. move the unique_lock into the binder
// to keep the mutex locked until asio is done sending.
asio::async_write(stream_,
asio::const_buffers_1(response_.data(),
response_.size()),
std::bind(&connection::response_sent,
shared_from_this(),
_1, _2, std::move(locker))
);
}
void connection::response_sent(const boost::system::error_code& err,
std::size_t len)
{
if (err) handle_error(err);
// the mutex is unlocked when the binder is destroyed
}
}}}
Please remove this restriction, there is no reason for it when using
C++11.
-- Ticket URL: <https://svn.boost.org/trac/boost/ticket/8714> Boost C++ Libraries <http://www.boost.org/> Boost provides free peer-reviewed portable C++ source libraries.
This archive was generated by hypermail 2.1.7 : 2017-02-16 18:50:13 UTC