http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57765
--- Comment #3 from trashyankes at wp dot pl --- I see, they fix wording in final version, but meaning didnt change (at last if I understand it correctly). "(...) primary class template or alias template is a template parameter pack, it shall be the last template-parameter" template <typename ... Ts> //<-this is a "primary class template" class Foo { }; template <typename TR, typename ... Ts, TR (&f)(Ts...)> // ^-- this isnt a "primary class template" struct OpF<TR (Ts...), f> //<-this is a "primary class template" { }; "(...) function template shall not be followed by another template parameter unless that template parameter can be deduced (...)" template < typename TR, typename ... Ts, int i> TR tester(Ts...); // cant be deduced --^