]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR c++/27424 (Valid template-template-parameter rejected)
authorJason Merrill <jason@redhat.com>
Thu, 29 Jun 2006 01:27:17 +0000 (21:27 -0400)
committerJason Merrill <jason@gcc.gnu.org>
Thu, 29 Jun 2006 01:27:17 +0000 (21:27 -0400)
        PR c++/27424
        * pt.c (convert_template_argument): Pass all template arguments
        on to coerce_template_template_parms.

From-SVN: r115063

gcc/cp/ChangeLog
gcc/cp/pt.c
gcc/testsuite/g++.dg/template/ttp20.C [new file with mode: 0644]

index e68602f3e86aabd0ac22db083dd0eaf0f56d2537..1557a7616ee1862cb0c058fa335616461bf87bf5 100644 (file)
@@ -1,3 +1,9 @@
+2006-06-28  Jason Merrill  <jason@redhat.com>
+
+       PR c++/27424
+       * pt.c (convert_template_argument): Pass all template arguments 
+       on to coerce_template_template_parms.
+
 2006-06-25  Lee Millward  <lee.millward@gmail.com>
            Mark Mitchell <mark@codesuorcery.com>
 
index 89afb5fe3b94e02102638c8ea4b1dd4d58856caa..a81f6a0593546b4293785dbb9c1d6490195d4989 100644 (file)
@@ -3837,11 +3837,8 @@ convert_template_argument (tree parm,
                           tree in_decl)
 {
   tree val;
-  tree inner_args;
   int is_type, requires_type, is_tmpl_type, requires_tmpl_type;
 
-  inner_args = INNERMOST_TEMPLATE_ARGS (args);
-
   if (TREE_CODE (arg) == TREE_LIST
       && TREE_CODE (TREE_VALUE (arg)) == OFFSET_REF)
     {
@@ -3933,7 +3930,7 @@ convert_template_argument (tree parm,
 
              if (coerce_template_template_parms (parmparm, argparm,
                                                  complain, in_decl,
-                                                 inner_args))
+                                                 args))
                {
                  val = arg;
 
diff --git a/gcc/testsuite/g++.dg/template/ttp20.C b/gcc/testsuite/g++.dg/template/ttp20.C
new file mode 100644 (file)
index 0000000..0d1784c
--- /dev/null
@@ -0,0 +1,11 @@
+// PR c++/27424
+// Bug: failing to substitute the 'int' into C
+
+template<typename T> struct A
+{
+    template<template<T> class> struct B {};
+    template<T> struct C;
+    B<C> b;
+};
+
+A<int> a;