30 template <
typename Mutex,
template <
typename>
class Atom = std::atomic>
52 template <
typename>
class Atom,
57 flag.
call_once(std::forward<F>(
f), std::forward<Args>(args)...);
65 template <
typename Mutex,
template <
typename>
class Atom>
75 template <
typename>
class Atom_,
80 template <
typename F,
typename...
Args>
88 template <
typename F,
typename...
Args>
91 if (
called_.load(std::memory_order_relaxed)) {
94 invoke(std::forward<F>(
f), std::forward<Args>(args)...);
95 called_.store(
true, std::memory_order_release);
#define FOLLY_ALWAYS_INLINE
basic_once_flag & operator=(const basic_once_flag &)=delete
internal::ArgsMatcher< InnerMatcher > Args(const InnerMatcher &matcher)
—— Concurrent Priority Queue Implementation ——
requires E e noexcept(noexcept(s.error(std::move(e))))
FOLLY_ALWAYS_INLINE void call_once(basic_once_flag< Mutex, Atom > &flag, F &&f, Args &&...args)
constexpr auto invoke(F &&f, Args &&...args) noexcept(noexcept(static_cast< F && >(f)(static_cast< Args && >(args)...))) -> decltype(static_cast< F && >(f)(static_cast< Args && >(args)...))
FOLLY_ALWAYS_INLINE void call_once(F &&f, Args &&...args)
auto lock(Synchronized< D, M > &synchronized, Args &&...args)
friend void call_once(basic_once_flag< Mutex_, Atom_ > &, F &&, Args &&...)
constexpr basic_once_flag() noexcept=default
FOLLY_NOINLINE void call_once_slow(F &&f, Args &&...args)