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.