|  | Home | Libraries | People | FAQ | More | 
An initiating function produces its return type as follows:
          — constructing an object result of type async_result<decay_t<CompletionToken>,
          Signature>, initialized as result(completion_handler);
          and
        
          — using result.get() as the operand of the return statement.
        
          [Example: Given an asynchronous operation with Completion
          signature void(R1 r1, R2 r2), an initiating function
          meeting these requirements may be implemented as follows:
        
template<class CompletionToken>
auto async_xyz(T1 t1, T2 t2, CompletionToken&& token)
{
  typename async_result<decay_t<CompletionToken>, void(R1, R2)>::completion_handler_type
    completion_handler(forward<CompletionToken>(token));
  async_result<decay_t<CompletionToken>, void(R1, R2)> result(completion_handler);
  // initiate the operation and cause completion_handler to be invoked with
  // the result
  return result.get();
}
          For convenience, initiating functions may be implemented using the async_completion
          template:
        
template<class CompletionToken>
auto async_xyz(T1 t1, T2 t2, CompletionToken&& token)
{
  async_completion<CompletionToken, void(R1, R2)> init(token);
  // initiate the operation and cause init.completion_handler to be invoked
  // with the result
  return init.result.get();
}
—end example]