30 Thread support library [thread]

30.4 Mutual exclusion [thread.mutex]

30.4.4 Call once [thread.once]

30.4.4.1 Struct once_flag [thread.once.onceflag]

namespace std {
  struct once_flag {
    constexpr once_flag() noexcept;

    once_flag(const once_flag&) = delete;
    once_flag& operator=(const once_flag&) = delete;
  };
}

The class once_flag is an opaque data structure that call_once uses to initialize data without causing a data race or deadlock.

constexpr once_flag() noexcept;

Effects: Constructs an object of type once_flag.

Synchronization: The construction of a once_flag object is not synchronized.

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.