### Legacy completion handler requirements

A legacy completion handler must meet the requirements for a 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()`.

##### 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));