13 Asynchronous model [async]

13.2 Requirements [async.reqmts]

13.2.7 Requirements on asynchronous operations [async.reqmts.async]

13.2.7.6 Non-blocking requirements on initiating functions [async.reqmts.async.non.blocking]

An initiating function shall not block (C++ 2014 [defns.block]) the calling thread pending completion of the outstanding operation.

Note: Initiating functions can still block the calling thread for other reasons. For example, if an initiating function locks a mutex in order to synchronize access to shared data.  — end note ]