| 21 | |
| 22 | template<typename ... T> |
| 23 | struct Tracer : T... |
| 24 | { |
| 25 | Tracer() = default; |
| 26 | explicit Tracer(T ... t) |
| 27 | : T(std::move(t))... |
| 28 | { |
| 29 | } |
| 30 | |
| 31 | void do_trace(const chaiscript::detail::Dispatch_State &ds, const AST_Node_Impl<Tracer<T...>> *node) { |
| 32 | (void)std::initializer_list<int>{ (static_cast<T&>(*this).trace(ds, node), 0)... }; |
| 33 | } |
| 34 | |
| 35 | static void trace(const chaiscript::detail::Dispatch_State &ds, const AST_Node_Impl<Tracer<T...>> *node) { |
| 36 | ds->get_parser().get_tracer<Tracer<T...>>().do_trace(ds, node); |
| 37 | } |
| 38 | }; |
| 39 | |
| 40 | typedef Tracer<Noop_Tracer_Detail> Noop_Tracer; |
| 41 | |