https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86918
--- Comment #4 from Vladimir Reshetnikov <v.reshetnikov at gmail dot com> --- I could not find a wording in the Standard that disallows this kind of specialization (although certainly I might have overlooked it). A similar code where the template parameter list is changed in a specialization compiles successfully with GCC: template<class> struct Outer { template<char... x> struct Inner; }; template<> template<bool... x> struct Outer<void>::Inner { static constexpr auto value = sizeof...(x); }; static_assert(Outer<void>::Inner<>::value == 0); // OK