re PR c++/14479 (enum definition in template class with template methods causes error.)
authorKriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
Sat, 12 Feb 2005 15:40:28 +0000 (15:40 +0000)
committerKriang Lerdsuwanakij <lerdsuwa@gcc.gnu.org>
Sat, 12 Feb 2005 15:40:28 +0000 (15:40 +0000)
PR c++/14479
PR c++/19487
* pt.c (maybe_check_template_type): Remove.
* cp-tree.h (maybe_check_template_type): Remove prototype.
* name-lookup.c (maybe_process_template_type_declaration): Don't
use maybe_check_template_type.

* g++.dg/template/enum5.C: New test.

From-SVN: r94941

gcc/cp/ChangeLog
gcc/cp/cp-tree.h
gcc/cp/name-lookup.c
gcc/cp/pt.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/template/enum5.C [new file with mode: 0644]

index 9e67a94fc0d04768487c6d1ec754bf92b902c2ac..b60b6deaf3763160e23cf139949e09e2100af28f 100644 (file)
@@ -1,3 +1,12 @@
+2005-02-12  Kriang Lerdsuwanakij  <lerdsuwa@users.sourceforge.net>
+
+       PR c++/14479
+       PR c++/19487
+       * pt.c (maybe_check_template_type): Remove.
+       * cp-tree.h (maybe_check_template_type): Remove prototype.
+       * name-lookup.c (maybe_process_template_type_declaration): Don't
+       use maybe_check_template_type.
+
 2005-02-11  Richard Henderson  <rth@redhat.com>
 
        PR c++/19632
index 0b4959ba37302b5b40b813f6753c4538411a156e..bd5d0eca14dad7ea8756030be70da60333950fbf 100644 (file)
@@ -4010,7 +4010,6 @@ extern int is_specialization_of                 (tree, tree);
 extern bool is_specialization_of_friend         (tree, tree);
 extern int comp_template_args                   (tree, tree);
 extern void maybe_process_partial_specialization (tree);
-extern void maybe_check_template_type           (tree);
 extern tree most_specialized_instantiation      (tree);
 extern void print_candidates                    (tree);
 extern void instantiate_pending_templates       (int);
index b72ded0903b8d6f88dc175d5e8172ca460f6e8d3..7d944d054518d765b6bda43799ac436e9fbcba3a 100644 (file)
@@ -4514,8 +4514,6 @@ maybe_process_template_type_declaration (tree type, int globalize,
     ;
   else
     {
-      maybe_check_template_type (type);
-
       gcc_assert (IS_AGGR_TYPE (type) || TREE_CODE (type) == ENUMERAL_TYPE);
 
       if (processing_template_decl)
index d484c8b75c7deee712bc1e7182b6893b87269de9..b131213c886ccc25c19da315c68a025cbcde6161 100644 (file)
@@ -2101,49 +2101,6 @@ check_explicit_specialization (tree declarator,
   return decl;
 }
 
-/* TYPE is being declared.  Verify that the use of template headers
-   and such is reasonable.  Issue error messages if not.  */
-
-void
-maybe_check_template_type (tree type)
-{
-  if (template_header_count)
-    {
-      /* We are in the scope of some `template <...>' header.  */
-
-      int context_depth 
-       = template_class_depth_real (TYPE_CONTEXT (type),
-                                    /*count_specializations=*/1);
-
-      if (template_header_count <= context_depth)
-       /* This is OK; the template headers are for the context.  We
-          are actually too lenient here; like
-          check_explicit_specialization we should consider the number
-          of template types included in the actual declaration.  For
-          example, 
-
-            template <class T> struct S {
-              template <class U> template <class V>
-              struct I {};
-            }; 
-
-          is invalid, but:
-
-            template <class T> struct S {
-              template <class U> struct I;
-            }; 
-
-            template <class T> template <class U.
-            struct S<T>::I {};
-
-          is not.  */
-       ; 
-      else if (template_header_count > context_depth + 1)
-       /* There are two many template parameter lists.  */
-       error ("too many template parameter lists in declaration of %qT", type); 
-    }
-}
-
 /* Returns 1 iff PARMS1 and PARMS2 are identical sets of template
    parameters.  These are represented in the same format used for
    DECL_TEMPLATE_PARMS.  */
index d0caedd841d466300cf21313f006c7289b07057e..255f26961e44fe752fd0c81d2b046f9e4c4d888c 100644 (file)
@@ -1,3 +1,9 @@
+2005-02-12  Kriang Lerdsuwanakij  <lerdsuwa@users.sourceforge.net>
+
+       PR c++/14479
+       PR c++/19487
+       * g++.dg/template/enum5.C: New test.
+
 2005-02-12  Ira Rosen  <irar@il.ibm.com>
 
        * gcc.dg/vect/vect-97.c: New test.
diff --git a/gcc/testsuite/g++.dg/template/enum5.C b/gcc/testsuite/g++.dg/template/enum5.C
new file mode 100644 (file)
index 0000000..b7a49f4
--- /dev/null
@@ -0,0 +1,16 @@
+// { dg-do compile }
+
+// Origin: robertk@mathematik.uni-freiburg.de
+//        Wolfgang Bangerth <bangerth@ticam.utexas.edu>
+
+// PR c++/14479: Template header check for enum
+
+template <int dim>
+struct X {
+  enum { dimension = dim };
+  template<int d> void bar ();
+};
+
+template <>
+template <>
+void X<0>::bar<0> () {}