Opened 9 years ago
Last modified 8 years ago
#8714 new Feature Requests
Allow move-only handlers
Reported by: | Owned by: | chris_kohlhoff | |
---|---|---|---|
Milestone: | To Be Determined | Component: | asio |
Version: | Boost 1.53.0 | Severity: | Problem |
Keywords: | Cc: |
Description
(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.
Note:
See TracTickets
for help on using tickets.
Any progress/discussion on this? There's plenty of reasons to allow move-only constructors, another is to use stackless coroutines with moveable only members, such as a deadline_timer, without having to wrap everything in a shared_ptr, needlessly complicating the code for a coroutine.