nontype3.C: New test.
authorGiovanni Bajo <giovannibajo@gcc.gnu.org>
Tue, 16 Dec 2003 15:58:38 +0000 (15:58 +0000)
committerGiovanni Bajo <giovannibajo@gcc.gnu.org>
Tue, 16 Dec 2003 15:58:38 +0000 (15:58 +0000)
* g++.dg/template/nontype3.C: New test.
* g++.dg/template/static2.C: Tweaked the dg-error clause.

From-SVN: r74701

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

index d685e43b72caf54810abd319e4a74562ab6a07f9..e31d5d54a612c20814072552575e36383a91d75c 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 d18c1a7fb4e6dd073a1ae19b997f70656047d7bc..881f07ce95a0b21f1fcafca70821f96f68e707cc 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