I love the functional direction of template metaprogramming and I certainly support more functional concepts in the core language. Partial application is nice, and the general idea of implanting that into C++ is something I support.
A key feature that you're avoiding here is that of flipping parameters so you can pre-fill the 1st and 3rd parameter and return a function accepting the second parameter and returning the fully evaluated expression - I think this should be a key part of your proposal. Limiting the partial application abilities because of some arbitrary parameter order would be rather frustrating/
I don't think there's any point in defining the function any differently from a normal function (i.e. parameters in different sets of parentheses). If you can utilise partial application at all, then I believe that there is no need to restrict it to functions defined in a very specific way, especially when we already have so many libraries that declare functions in the usual way.
Rather than having special syntax at all, it'd first make sense if you can explore the idea of wrapping this in some kind of existing structure. For example, a class encapsulating a function call, where each call recursively produces a sub-class expecting the next parameter until the class with only one remaining parameter, which returns the final result upon the operator() call. You'd stand a
much better chance doing it that way than changing the underlying language. Fortunately there are already some minor efforts towards this, e.g.
https://vittorioromeo.info/index/blog/cpp17_curry.html -
also make sure you look at std::bind, as it is quite relevant here.