commit 7cf59ddcccb7809fa17ef1619d44adc85ab8000e
Author: Jason Merrill <jason@redhat.com>
Date: Mon Aug 9 16:08:59 2010 -0400
PR c++/45236
* pt.c (lookup_template_class): Don't re-coerce outer parms.
@@ -6540,11 +6540,16 @@ lookup_template_class (tree d1,
i > 0 && t != NULL_TREE;
--i, t = TREE_CHAIN (t))
{
- tree a = coerce_template_parms (TREE_VALUE (t),
- arglist, gen_tmpl,
- complain,
- /*require_all_args=*/true,
- /*use_default_args=*/true);
+ tree a;
+ if (i == saved_depth)
+ a = coerce_template_parms (TREE_VALUE (t),
+ arglist, gen_tmpl,
+ complain,
+ /*require_all_args=*/true,
+ /*use_default_args=*/true);
+ else
+ /* Outer levels should have already been coerced. */
+ a = TMPL_ARGS_LEVEL (arglist, i);
/* Don't process further if one of the levels fails. */
if (a == error_mark_node)
new file mode 100644
@@ -0,0 +1,16 @@
+// PR c++/45236
+// { dg-options -std=c++0x }
+
+template <class T, class S> class foo;
+
+template<template<int...> class C, int... II, class S>
+struct foo<C<II...>,S>
+{
+ template <class U>
+ struct bar { typedef int type; };
+};
+
+template <int... I>
+struct A {};
+
+foo<A<3>, float>::bar<int> x;