#include "interpolate.h" using kblib::variant_cast; template using tag = std::integral_constant; arg_t eval(const template_machine& tm, const tnode& expr, const ArgsType& args) { return kblib::visit_indexed( expr.data, [&](tag, const std::string& str) -> arg_t { return str; }, [&](tag, int arg) -> arg_t { return variant_cast(args[arg]); }, [&](tag, std::string_view arg) -> arg_t { return variant_cast(args[tm.special_argument(arg)]); }, [&](tag, std::monostate) -> arg_t { return variant_cast(args[tm.special_argument("...")]); }, [&](tag, const t_func* f) -> arg_t { return f->eval(tm, args, expr.children); }); }