https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61953
--- Comment #2 from Andrew Pinski <pinskia at gcc dot gnu.org> --- Clang and GCC both accept the code slightly. ICC accepts the code with a warning: <source>(1): warning #2922: template parameter "U" cannot be used because it follows a parameter pack and cannot be deduced from the parameters of function template "f" template<class... T, class... U> void f() { } ^ <source>(2): warning #2922: template parameter "U" cannot be used because it follows a parameter pack and cannot be deduced from the parameters of function template "g" template<class... T, class U> void g() { } ^ MSVC rejects the code: <source>(1): error C3547: template parameter 'U' cannot be used because it follows a template parameter pack and cannot be deduced from the function parameters of 'f' <source>(1): note: see declaration of 'U' <source>(2): error C3547: template parameter 'U' cannot be used because it follows a template parameter pack and cannot be deduced from the function parameters of 'g' <source>(2): note: see declaration of 'U'