The async_result class template is a customization point for asynchronous operations. Template parameter CompletionToken specifies the model used to obtain the result of the asynchronous operation. Template parameter Signature is the call signature (C++ 2014 [func.def]) for the completion handler type invoked on completion of the asynchronous operation. The async_result template:
transforms a CompletionToken into a completion handler type that is based on a Signature; and
determines the return type and return value of an asynchronous operation's initiating function.
namespace std { namespace experimental { namespace net { inline namespace v1 { template<class CompletionToken, class Signature> class async_result { public: using completion_handler_type = CompletionToken; using return_type = void; explicit async_result(completion_handler_type&) {} async_result(const async_result&) = delete; async_result& operator=(const async_result&) = delete; return_type get() {} }; } // inline namespace v1 } // namespace net } // namespace experimental } // namespace std
The template parameter CompletionToken shall be an object type. The template parameter Signature shall be a call signature (C++ 2014 [func.def]).
Specializations of async_result shall satisfy the Destructible requirements (C++ 2014 [destructible]) in addition to the requirements in Table [tab:async.async.result.requirements]. In this table, R is a specialization of async_result; r is a modifiable lvalue of type R; and h is a modifiable lvalue of type R::completion_handler_type.
Expression | Return type | Requirement |
R::completion_handler_type | A type satisfying MoveConstructible requirements (C++ 2014 [moveconstructible]), An object of type completion_handler_type shall be a function object with call signature Signature, and completion_handler_type shall be constructible with an rvalue of type CompletionToken. | |
R::return_type | void; or a type satisfying MoveConstructible requirements (C++ 2014 [moveconstructible]) | |
R r(h); | ||
r.get() | R::return_type | [ Note: An asynchronous operation's initiating function uses the get() member function as the sole operand of a return statement. — end note ] |