http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48322
Jason Merrill <jason at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Last reconfirmed| |2011.05.25 04:24:42 CC| |jason at gcc dot gnu.org Ever Confirmed|0 |1 --- Comment #1 from Jason Merrill <jason at gcc dot gnu.org> 2011-05-25 04:24:42 UTC --- Reduced, compile-time testcase: template <class... T> struct tuple; template <class T> struct tuple<T> { T t; }; template <class T, class U> struct pair; template<> struct pair<int,double> { }; template <class... Ts> struct A { template <class... Us, class V = tuple<pair<Ts,Us>...> > static void f() { V v; } }; int main() { A<int>::f<double>(); } The problem is that partial instantiation doesn't replace Ts with {int}, but it does lower the level of Us, so by the time we get to deduction Ts and Us both have level 1 and so both are replaced with {double}. This will be complicated to fix.