temp.deduct.type#17 specifies that
If, in the declaration of a function template with a non-type template parameter, the non-type template parameter is used in a subexpression in the function parameter list, the expression is a non-deduced context as specified above.
which means for the following declaration of f
template<int> struct S {};
template<int i> void f(S<i + 1>) {}
the call f(S<42>{}) is rejected.
However, if the declaration of f is changed to
template<int i> void f(S<(i)>) {}
only Clang rejects the call, with the same error as before.
So, does adding parentheses around i make it a non-deduced context, because i is a subexpression of (i)?