Opened 4 years ago

Last modified 3 years ago

#8714 new Feature Requests

Allow move-only handlers

Reported by: Marton <marton78@…> Owned by: chris_kohlhoff
Milestone: To Be Determined Component: asio
Version: Boost 1.53.0 Severity: Problem
Keywords: Cc:


(See also

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::const_buffers_1(, 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.

Attachments (0)

Change History (1)

comment:1 Changed 3 years ago by cristi.cobzarenco@…

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.

Modify Ticket

Change Properties
Set your email in Preferences
as new The owner will remain chris_kohlhoff.

Add Comment

E-mail address and name can be saved in the Preferences.

Note: See TracTickets for help on using tickets.