Aha: 13.2.2 table 4:
x1.defer(std::move(f), a)
Effects: Creates an object f1 initialized with
DECAY_COPY(std::forward(f)) in the
current thread of execution. Calls f1() at
most once. The executor shall not block
forward progress of the caller pending
completion of f1(). The executor should not
begin f1’s progress before the call to defer
completes. [ Note: One use of defer is to
convey the intention of the caller that f1 is a
continuation of the current call context. The
executor may use this information to optimize
or otherwise adjust the way in which f1 is
invoked. — end note ] Executor
implementations should use the supplied
allocator to allocate any memory required to
store the function object. Prior to invoking
the function object, the executor shall
deallocate any memory allocated. [ Note:
Executors defined in this Technical
Specification always use the supplied allocator
unless otherwise specified. — end note ]
Synchronization: The invocation of defer
synchronizes with (C++ 2014
[intro.multithread]) the invocation of f1.