OSDN Git Service

* pt.c (lookup_template_class): Look through implict typename.
authorjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 12 Apr 1999 10:54:06 +0000 (10:54 +0000)
committerjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 12 Apr 1999 10:54:06 +0000 (10:54 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@26370 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/cp/ChangeLog
gcc/cp/pt.c

index be8c865..992aaa9 100644 (file)
@@ -1,3 +1,7 @@
+1999-04-12  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * pt.c (lookup_template_class): Look through implict typename.
+
 1999-04-11  Mark Mitchell  <mark@codesourcery.com>
 
        * friend.c (add_friend): Deal gracefully with error_mark_node.
index 2988ed6..e8de776 100644 (file)
@@ -3581,9 +3581,16 @@ lookup_template_class (d1, arglist, in_decl, context, entering_scope)
     }
   else if (TREE_CODE (d1) == TYPE_DECL && IS_AGGR_TYPE (TREE_TYPE (d1)))
     {
-      if (CLASSTYPE_TEMPLATE_INFO (TREE_TYPE (d1)))
+      tree type = TREE_TYPE (d1);
+
+      /* If we are declaring a constructor, say A<T>::A<T>, we will get
+        an implicit typename for the second A.  Deal with it.  */
+      if (TREE_CODE (type) == TYPENAME_TYPE && TREE_TYPE (type))
+       type = TREE_TYPE (type);
+       
+      if (CLASSTYPE_TEMPLATE_INFO (type))
        {
-         template = CLASSTYPE_TI_TEMPLATE (TREE_TYPE (d1));
+         template = CLASSTYPE_TI_TEMPLATE (type);
          d1 = DECL_NAME (template);
        }
     }