http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52008
--- Comment #15 from Jonathan Wakely <redi at gcc dot gnu.org> 2012-11-07 00:08:48 UTC --- (In reply to comment #14) > GCC "rejects" it by doing ICE. I don't think this is the right thing that GCC > should do. No it doesn't it gives an error, see comment 4. > My last proposal is: gcc should report error at the place where the wannabe > specialization is defined (comment with "line 18") with something like: "18: > This template specialization does not match the template parameters\n12: of > this class template". I cannot check whether gcc currently fixed to do this, > so > I'm sorry if this is behind the current state. t.cc:1:11: error: 'size_t' has not been declared template <size_t B, typename Type1, typename... Types> ^ t.cc:8:8: error: partial specialization is not more specialized than the primary template because it replaces multiple parameters with a pack expansion struct tuple_sliced<0, Types...> // <-- line 18 ^ t.cc:2:8: note: primary template here struct tuple_sliced ^ t.cc:10:13: error: 'tuple' does not name a type typedef tuple<Types...> type; ^