8#ifndef ION_DETAIL_BARRIER_HPP
9#define ION_DETAIL_BARRIER_HPP
11#include <ion/detail/macros.hpp>
13namespace ion::detail {
17template <
class CompletionFunction>
20class BarrierBase<NoOp> {
22 BarrierBase(NoOp&& f) {
26template <
class CompletionFunction>
29 static_assert(std::is_nothrow_invocable_v<CompletionFunction&>,
"");
30 BarrierBase(CompletionFunction&& f) : m_completion(std::forward<CompletionFunction>(f)) {
34 ION_FORCE_INLINE
inline void Complete() noexcept {
39 CompletionFunction m_completion;
42template <
class CompletionFunction>
44constexpr bool IsNoOp =
45 std::is_same_v<detail::NoOp, std::remove_cv_t<std::remove_reference_t<CompletionFunction>>>;
48ION_FORCE_INLINE
inline void Invoke(F&& f) {
49 if constexpr (!IsNoOp<F>) {