From ff5034c5be89c496e39b79b52cd496130c51fdb2 Mon Sep 17 00:00:00 2001 From: Giovanni Bajo Date: Tue, 16 Dec 2003 15:58:38 +0000 Subject: [PATCH] nontype3.C: New test. * g++.dg/template/nontype3.C: New test. * g++.dg/template/static2.C: Tweaked the dg-error clause. From-SVN: r74701 --- gcc/testsuite/ChangeLog | 5 ++++ gcc/testsuite/g++.dg/template/nontype3.C | 37 ++++++++++++++++++++++++ gcc/testsuite/g++.dg/template/static2.C | 2 +- 3 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.dg/template/nontype3.C diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index d685e43b72c..e31d5d54a61 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2003-12-16 Giovanni Bajo + + * g++.dg/template/nontype3.C: New test. + * g++.dg/template/static2.C: Tweaked the dg-error clause. + 2003-12-16 Kriang Lerdsuwanakij * 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 index 00000000000..15a204fa6e4 --- /dev/null +++ b/gcc/testsuite/g++.dg/template/nontype3.C @@ -0,0 +1,37 @@ +// { dg-do compile } +// Origin: , +// +// c++/13243: Template parameters of non integral or enumeration type can't be +// used for integral constant expressions. ADDR_EXPR and INDIRECT_REF are +// invalid too. + +template class foo {}; +template class bar {}; + +template +void dep5(bar *); + +template +void dep6(bar *); // { dg-error "" "integral or enumeration" } + +template +void dep7(bar *); + +template +void dep8(foo< *PI > *); // { dg-error "" "integral or enumeration" } + +template +void dep9(foo< *PI > *); // { dg-error "" "integral or enumeration" } + +template +void dep9a(foo< sizeof(*PI) > *); + +template +void dep10(foo< PI[0] > *); // { dg-error "" "integral or enumeration" } + +template +void dep11(foo< *&I > *); // { dg-error "" "constant-expression" } + +template +void dep12(foo< (&I)[4] > *); // { dg-error "" "constant-expression" } + diff --git a/gcc/testsuite/g++.dg/template/static2.C b/gcc/testsuite/g++.dg/template/static2.C index d18c1a7fb4e..881f07ce95a 100644 --- a/gcc/testsuite/g++.dg/template/static2.C +++ b/gcc/testsuite/g++.dg/template/static2.C @@ -4,7 +4,7 @@ template class B { public: - static int A::* const p = P; // { dg-error "in-class" } + static int A::* const p = P; // { dg-error "" } }; class A -- 2.30.2