#### I/O executor

An asynchronous operation has an associated executor satisfying the `Executor` requirements. If not otherwise specified by the asynchronous operation, this associated executor is an object of type `system_executor`.

All asynchronous operations in this library have an associated executor object that is determined as follows:

— If the initiating function is a member function, the associated executor is that returned by the `get_executor` member function on the same object.

— If the initiating function is not a member function, the associated executor is that returned by the `get_executor` member function of the first argument to the initiating function.

Let `Executor1` be the type of the associated executor. Let `ex1` be a value of type `Executor1`, representing the associated executor object obtained as described above.