[/
 / 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:LegacyCompletionHandler Legacy completion handler requirements]

A legacy completion handler must meet the requirements for a [link
asio.reference.Handler handler]. A legacy completion handler must meet the
requirements of `CopyConstructible` types (C++Std [copyconstructible]). A value
`h` of a completion handler class should work correctly in the expression
`h()`.

[heading Examples]

A free function as a completion handler:

  void completion_handler()
  {
    ...
  }

A completion handler function object:

  struct completion_handler
  {
    ...
    void operator()()
    {
      ...
    }
    ...
  };

A lambda as a completion handler:

  my_io_service.post(
      []()
      {
        ...
      });

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

  void my_class::completion_handler()
  {
    ...
  }
  ...
  my_io_service.post(std::bind(&my_class::completion_handler, this));

A non-static class member function adapted to a completion handler using
`boost::bind()`:

  void my_class::completion_handler()
  {
    ...
  }
  ...
  my_io_service.post(boost::bind(&my_class::completion_handler, this));

[endsect]
