#### async_completion::completion_handler_type

The real handler type to be used for the asynchronous operation.

    typedef asio::async_result< decay_t< CompletionToken >, Signatures... >::completion_handler_type completion_handler_type;

###### Types

Name | Description
--- | ---
completion_handler_type | (Legacy.) The concrete completion handler type for the specific signature.
return_type | (Legacy.) The return type of the initiating function.

###### Member Functions

Name | Description
--- | ---
async_result [constructor] | (Legacy.) Construct an async result from a given handler.
get | (Legacy.) Obtain the value to be returned from the initiating function.
initiate [static] | Initiate the asynchronous operation that will produce the result, and obtain the value to be returned from the initiating function.

The `async_result` trait is a customisation point that is used within the initiating function for an asynchronous operation. The trait combines:

- the completion signature (or signatures) that describe the arguments that an asynchronous operation will pass to a completion handler;
- the completion token type supplied by the caller; and
- the operation's internal implementation.

Specialisations of the trait must satisfy the async_result requirements, and are reponsible for determining:

- the concrete completion handler type to be called at the end of the asynchronous operation;
- the initiating function return type;
- how the return value of the initiating function is obtained; and
- how and when to launch the operation by invoking the supplied initiation function object.

This template may be specialised for user-defined completion token types. The primary template assumes that the CompletionToken is the already a concrete completion handler.

###### Remarks

For backwards compatibility, the primary template implements member types and functions that are associated with legacy forms of the `async_result` trait. These are annotated as "Legacy" in the documentation below. User specialisations of this trait do not need to implement these in order to satisfy the async_result requirements.

In general, implementers of asynchronous operations should use the async_initiate function rather than using the `async_result` trait directly.

###### Requirements

Header: `asio/async_result.hpp`

Convenience header: `asio.hpp`