Postconditions: The object's internal state is set to indicate to an invocation of
call_once with the object as its initial argument that no function has been
called.
Effects: An execution of call_once that does not call its func is a
passive execution.
An execution of call_once that calls its func
is an active execution.
An active execution calls
INVOKE(std::forward<Callable>(func),
std::forward<Args>(args)...) ([func.require]).
If such a call to func
throws an exception the execution is exceptional, otherwise it is returning.
An exceptional execution propagates the exception to the caller of
call_once.
Among all executions of call_once for any given
once_flag: at most one is a returning execution; if there is a
returning execution, it is the last active execution; and there are
passive executions only if there is a returning execution.
Synchronization: For any given once_flag: all active executions occur in a total
order; completion of an active execution synchronizes with
the start of the next one in this total order; and the returning execution
synchronizes with the return from all passive executions.