Here is an example from temp.deduct.partial.
template<class... Args> void f(Args... args); // #1
template<class T1, class... Args> void f(T1 a1, Args... args); // #2
template<class T1, class T2> void f(T1 a1, T2 a2); // #3
f(); // calls #1
f(1, 2, 3); // calls #2
f(1, 2); // calls #3; non-variadic template #3 is more specialized
// than the variadic templates #1 and #2
Why f(1, 2, 3) calls #2?
It is easy to understand before CWG1395. #2 cannot be deduced from #1 because Args is a parameter pack and T1 is not, so #2 is more specialized than #1.
But how to understand this example after CWG1395? It seems that T1 can be deduced from Args now.
Similarly, if
Awas transformed from a function parameter pack, it is compared with each remaining parameter type of the parameter template.