22 template <
bool has_result = true>
23 struct abort_checker {
24 template <
typename aborter_t,
typename propagator_state_t,
typename stepper_t,
25 typename navigator_t,
typename result_t,
typename...
Args>
26 static bool check(
const aborter_t& aborter, propagator_state_t&
state,
28 const result_t& result,
Args&&...
args) {
29 using action_type = action_type_t<aborter_t>;
30 using result_type = result_type_t<action_type>;
32 return aborter(state, stepper, navigator,
33 result.template get<result_type>(),
34 std::forward<Args>(
args)...);
41 struct abort_checker<
false> {
42 template <
typename aborter_t,
typename propagator_state_t,
typename stepper_t,
43 typename navigator_t,
typename result_t,
typename...
Args>
44 static bool check(
const aborter_t& aborter, propagator_state_t&
state,
47 return aborter(state, stepper, navigator, std::forward<Args>(
args)...);
52 template <
typename... conditions>
58 template <
typename first,
typename... others>
60 template <
typename T,
typename propagator_state_t,
typename stepper_t,
61 typename navigator_t,
typename result_t,
typename...
Args>
62 static bool check(
const T& aborters_tuple, propagator_state_t&
state,
64 const result_t& result,
Args&&...
args) {
66 constexpr
bool has_result = has_action_type_v<first>;
69 const auto& this_aborter = std::get<first>(aborters_tuple);
76 navigator, result,
args...) ||
78 navigator, result,
args...);
85 template <
typename last>
87 template <
typename T,
typename propagator_state_t,
typename stepper_t,
88 typename navigator_t,
typename result_t,
typename...
Args>
89 static bool check(
const T& aborters_tuple, propagator_state_t&
state,
91 const result_t& result,
Args&&...
args) {
93 constexpr
bool has_result = has_action_type_v<last>;
94 const auto& this_aborter = std::get<last>(aborters_tuple);
97 std::forward<Args>(
args)...);
104 template <
typename T,
typename propagator_state_t,
typename stepper_t,
105 typename navigator_t,
typename result_t,
typename...
Args>
106 static bool check(
const T& , propagator_state_t& ,
109 const result_t& ,
Args&&... ) {