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)...). 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
. [
Note 1:
Passive
executions allow other threads to reliably observe the results produced by the
earlier returning execution
. —
end note]