So, your whole method looks like:

void start_accept()
    {
        tcp_connection::pointer new_connection =
            tcp_connection::create(acceptor_.get_io_service());

        std::function<void(const boost::system::error_code &error)> callback = std::bind(&tcp_server::handle_accept, this, new_connection,
            std::placeholders::_1);

        acceptor_.async_accept(new_connection->socket(), callback);
    }

Seems to compile.

I really don't understand how we are binding arguments that the template parameters did not specify the std::function to take.
Can I pass it a cow or a moose too and it won't care? As long as the callback takes a cow and a moose?

I thought all arguments had to be specified in the template params.





On Wed, Mar 29, 2017 at 8:28 AM, Steven Watanabe via Boost-users <boost-users@lists.boost.org> wrote:
AMDG

On 03/29/2017 07:07 AM, Christopher Pisz via Boost-users wrote:
> If I change it to
> std::function<void(const
>             boost::system::error_code &error)> callback = ...
>
> then the connection is not passed.

Yes it is.  The connection is stored inside the std::function.

> If it is not passed, then there is no
> way to store it, change its state, etc.
> It is passed in the tutorial code, so why can't I pass it with
> std::function?
>

In Christ,
Steven Watanabe

_______________________________________________
Boost-users mailing list
Boost-users@lists.boost.org
http://lists.boost.org/mailman/listinfo.cgi/boost-users