22 template <
class ExprType>
25 using expr_t = std::decay_t<ExprType>;
26 if constexpr (util::is_model_expr_v<expr_t>) {
30 auto activate__ = [&](
auto& eq_node) {
31 auto& var = eq_node.get_variable();
32 using var_t = std::decay_t<decltype(var)>;
33 if constexpr (util::is_param_v<var_t>) {
35 var.activate(cont_param_offset);
37 var.activate(disc_param_offset);
41 expr.traverse(activate__);
42 return std::make_pair(cont_param_offset, disc_param_offset);
44 }
else if constexpr (util::is_var_expr_v<expr_t>) {
48 auto activate__ = [&](
auto& eq_node) {
49 auto& var = eq_node.get_variable();
50 using var_t = std::decay_t<decltype(var)>;
51 static_assert(util::is_tparam_v<var_t>);
53 var.activate(cont_param_offset);
55 var.activate(disc_param_offset);
58 expr.traverse(activate__);
60 return std::make_pair(cont_param_offset, disc_param_offset);
64 static_assert(util::is_model_expr_v<expr_t>,
65 "Expression must be a model or variable expression");