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.

Reply via email to