* g++.dg/template/nontype3.C: New test.
authorgiovannibajo <giovannibajo@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 16 Dec 2003 15:58:38 +0000 (15:58 +0000)
committergiovannibajo <giovannibajo@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 16 Dec 2003 15:58:38 +0000 (15:58 +0000)
* g++.dg/template/static2.C: Tweaked the dg-error clause.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@74701 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/template/nontype3.C [new file with mode: 0644]
gcc/testsuite/g++.dg/template/static2.C

index d685e43..e31d5d5 100644 (file)
@@ -1,3 +1,8 @@
+2003-12-16  Giovanni Bajo  <giovannibajo@gcc.gnu.org>
+
+       * g++.dg/template/nontype3.C: New test.
+       * g++.dg/template/static2.C: Tweaked the dg-error clause.
+
 2003-12-16  Kriang Lerdsuwanakij  <lerdsuwa@users.sourceforge.net>
 
        * g++.dg/warn/noreturn-3.C: Also test instantiation.
diff --git a/gcc/testsuite/g++.dg/template/nontype3.C b/gcc/testsuite/g++.dg/template/nontype3.C
new file mode 100644 (file)
index 0000000..15a204f
--- /dev/null
@@ -0,0 +1,37 @@
+// { dg-do compile }\r
+// Origin: <drow at gcc dot gnu dot org>,\r
+//         <giovannibajo at gcc dot gnu dot org>\r
+// c++/13243: Template parameters of non integral or enumeration type can't be\r
+//  used for integral constant expressions. ADDR_EXPR and INDIRECT_REF are\r
+//  invalid too.\r
+\r
+template <int T> class foo {};\r
+template <int *T> class bar {};\r
+\r
+template <int *PI>\r
+void dep5(bar<PI> *);\r
+\r
+template <int *PI>\r
+void dep6(bar<PI+1> *); // { dg-error "" "integral or enumeration" }\r
+\r
+template <int I>\r
+void dep7(bar<I+1> *);\r
+\r
+template <int *PI>\r
+void dep8(foo< *PI > *); // { dg-error "" "integral or enumeration" }\r
+\r
+template <int PI[1]>\r
+void dep9(foo< *PI > *); // { dg-error "" "integral or enumeration" }\r
+\r
+template <int PI[1]>\r
+void dep9a(foo< sizeof(*PI) > *);\r
+\r
+template <int PI[1]>\r
+void dep10(foo< PI[0] > *); // { dg-error "" "integral or enumeration" }\r
+\r
+template <int I>\r
+void dep11(foo< *&I > *); // { dg-error "" "constant-expression" }\r
+\r
+template <int I>\r
+void dep12(foo< (&I)[4] > *); // { dg-error "" "constant-expression" }\r
+\r
index d18c1a7..881f07c 100644 (file)
@@ -4,7 +4,7 @@ template<int A::* P>
 class B
 {
 public:
-  static int A::* const p = P; // { dg-error "in-class" }
+  static int A::* const p = P; // { dg-error "" }
 };
 
 class A