[/
 / Copyright (c) 2003-2021 Christopher M. Kohlhoff (chris at kohlhoff dot com)
 /
 / Distributed under the Boost Software License, Version 1.0. (See accompanying
 / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 /]

[section:MoveAcceptHandler Move accept handler requirements]

A move accept handler must meet the requirements for a [link
asio.reference.Handler handler]. A value `h` of a move accept handler class
should work correctly in the expression `h(ec, s)`, where `ec` is an lvalue of
type `const error_code` and `s` is an lvalue of the nested type
`Protocol::socket` for the type `Protocol` of the socket class template.

[heading Examples]

A free function as a move accept handler:

  void accept_handler(
      const asio::error_code& ec, asio::ip::tcp::socket s)
  {
    ...
  }

A move accept handler function object:

  struct accept_handler
  {
    ...
    void operator()(
        const asio::error_code& ec, asio::ip::tcp::socket s)
    {
      ...
    }
    ...
  };

A lambda as a move accept handler:

  acceptor.async_accept(...,
      [](const asio::error_code& ec, asio::ip::tcp::socket s)
      {
        ...
      });

A non-static class member function adapted to a move accept handler using
`std::bind()`:

  void my_class::accept_handler(
      const asio::error_code& ec, asio::ip::tcp::socket socket)
  {
    ...
  }
  ...
  asio::async_accept(...,
      std::bind(&my_class::accept_handler,
        this, std::placeholders::_1,
        std::placeholders::_2));

[endsect]
