D.5.9. Класс std::once_flag
Экземпляры класса std::once_flag используются совместно с шаблоном функции std::call_once для гарантии того, что некая функция будет вызвала ровно один раз, даже если ее могут вызывать одновременно несколько потоков.
Экземпляры std::once_flag не удовлетворяют требованиям концепций CopyConstructible, CopyAssignable, MoveConstructible и MoveAssignable.
Определение класса
struct once_flag {
constexpr once_flag() noexcept;
once_flag(once_flag const&) = delete;
once_flag& operator=(once_flag const&) = delete;
};
STD::ONCE_FLAG , КОНСТРУКТОР ПО УМОЛЧАНИЮ
Создает объект std::once_flag в состоянии, обозначающем, что ассоциированная функция еще не вызывалась.
Объявление
constexpr once_flag() noexcept;
Результат
Конструирует новый экземпляр std::once_flag, оставляя его в состоянии, означающем, что ассоциированная функция еще не вызывалась. Поскольку в конструкторе присутствует квалификатор constexpr, то экземпляр со статическим временем жизни конструируется на этапе статической инициализации, что предотвращает состояние гонки и зависимость от порядка инициализации.