17 namespace seqan3::detail
35 struct priority_tag<0>
46 #ifdef SEQAN3_DEPRECATED_310
47 #define SEQAN3_CPO_IMPL(PRIO, TERM) \
49 template <typename t, typename ...arg_ts> \
50 static constexpr decltype(auto) impl(seqan3::detail::priority_tag<PRIO>, \
51 [[maybe_unused]] t && v, \
52 [[maybe_unused]] arg_ts && ... args) \
53 noexcept(noexcept(TERM)) \
54 requires requires (seqan3::detail::priority_tag<PRIO> const &, t && v, arg_ts && ... args)\
61 #if SEQAN3_DOXYGEN_ONLY(1)0
76 #define SEQAN3_CPO_OVERLOAD_BODY(...) noexcept(auto) { return __VA_ARGS__; }
78 #define SEQAN3_CPO_OVERLOAD_BODY(...) \
79 noexcept(noexcept(__VA_ARGS__)) \
80 -> decltype(__VA_ARGS__) \
81 { return __VA_ARGS__; } \
113 #define SEQAN3_CPO_OVERLOAD(...) \
114 cpo_overload(__VA_ARGS__) \
115 SEQAN3_CPO_OVERLOAD_BODY
117 namespace seqan3::detail
146 template <
typename derived_t,
unsigned max_priority>
147 struct customisation_point_object
153 constexpr customisation_point_object() =
default;
154 constexpr customisation_point_object(customisation_point_object &&) =
default;
155 constexpr customisation_point_object(customisation_point_object
const &) =
default;
156 constexpr customisation_point_object & operator=(customisation_point_object &&) =
default;
157 constexpr customisation_point_object & operator=(customisation_point_object
const &) =
default;
170 template <
typename ...args_t,
typename derived_type = derived_t >
171 constexpr
auto operator()(args_t && ...args)
const
174 derived_type::cpo_overload(priority_tag<max_priority>{}, std::forward<args_t>(args)...)
#define SEQAN3_CPO_OVERLOAD_BODY(...)
A macro helper for SEQAN3_CPO_OVERLOAD.
Definition: customisation_point.hpp:76