OSDN Git Service

* g++.dg/template/nontype3.C: New test.
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / g++.dg / template / nontype3.C
1 // { dg-do compile }\r
2 // Origin: <drow at gcc dot gnu dot org>,\r
3 //         <giovannibajo at gcc dot gnu dot org>\r
4 // c++/13243: Template parameters of non integral or enumeration type can't be\r
5 //  used for integral constant expressions. ADDR_EXPR and INDIRECT_REF are\r
6 //  invalid too.\r
7 \r
8 template <int T> class foo {};\r
9 template <int *T> class bar {};\r
10 \r
11 template <int *PI>\r
12 void dep5(bar<PI> *);\r
13 \r
14 template <int *PI>\r
15 void dep6(bar<PI+1> *); // { dg-error "" "integral or enumeration" }\r
16 \r
17 template <int I>\r
18 void dep7(bar<I+1> *);\r
19 \r
20 template <int *PI>\r
21 void dep8(foo< *PI > *); // { dg-error "" "integral or enumeration" }\r
22 \r
23 template <int PI[1]>\r
24 void dep9(foo< *PI > *); // { dg-error "" "integral or enumeration" }\r
25 \r
26 template <int PI[1]>\r
27 void dep9a(foo< sizeof(*PI) > *);\r
28 \r
29 template <int PI[1]>\r
30 void dep10(foo< PI[0] > *); // { dg-error "" "integral or enumeration" }\r
31 \r
32 template <int I>\r
33 void dep11(foo< *&I > *); // { dg-error "" "constant-expression" }\r
34 \r
35 template <int I>\r
36 void dep12(foo< (&I)[4] > *); // { dg-error "" "constant-expression" }\r
37 \r