new interface to make_custom_expr, user-defined expression types can be templates of any arity