https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102774
--- Comment #3 from Jonathan Wakely <redi at gcc dot gnu.org> --- For the first case: template<typename.. T> void f(T...) { } GCC prints: f.C:1:18: error: expected nested-name-specifier before ‘.’ token 1 | template<typename.. T> void f(T...) { } | ^ f.C:1:18: error: expected ‘>’ before ‘.’ token f.C:1:29: error: variable or field ‘f’ declared void 1 | template<typename.. T> void f(T...) { } | ^ f.C:1:31: error: ‘T’ was not declared in this scope 1 | template<typename.. T> void f(T...) { } | Clang says: f.C:1:18: error: expected a qualified name after 'typename' template<typename.. T> void f(T...) { } ^ f.C:1:18: error: expected ',' or '>' in template-parameter-list f.C:1:31: error: unknown type name 'T' template<typename.. T> void f(T...) { } ^ 3 errors generated. This has no "declared void" noise.