1 // { dg-do run }
2 // check EH with templates
3 extern "C" void abort ();
4 extern "C" void exit (int);
5
6 template <class T, int n, class U> struct A {
AA7 A() {}
AA8 A(const char*) {}
9 };
10
f1()11 void f1()
12 {
13 throw *(new A<double, 47, A<int, 37, short> >);
14 }
15
f2()16 void f2()
17 {
18 throw *(new A<double, 47, A<int, 36, short> >);
19 }
20
f3()21 void f3()
22 {
23 throw A<double, 47, A<int, 37, short> > ("howdy");
24 }
25
f4()26 void f4()
27 {
28 throw A<double, 47, A<int, 36, short> > ("hi michey");
29 }
30
main()31 int main()
32 {
33 int flag;
34
35 flag = 0;
36 try {
37 f1();
38 }
39 catch (A<double, 47, A<int, 36, short> >) {
40 abort();
41 }
42 catch (A<double, 47, A<int, 37, short> >) {
43 flag = 1;
44 }
45 if (!flag)
46 abort();
47
48 flag = 0;
49 try {
50 f2();
51 }
52 catch (A<double, 47, A<int, 36, short&> >) {
53 abort();
54 }
55 catch (A<double, 47, A<int, 36, short> >) {
56 flag = 1;
57 }
58 if (!flag)
59 abort();
60
61 flag = 0;
62 try {
63 f3();
64 }
65 catch (A<double, 47, A<int, 36, short> >) {
66 abort();
67 }
68 catch (A<double, 47, A<int, 37, short> >) {
69 flag = 1;
70 }
71 if (!flag)
72 abort();
73
74 flag = 0;
75 try {
76 f4();
77 }
78 catch (A<double, 47, A<int, 36, short&> >) {
79 abort();
80 }
81 catch (A<double, 47, A<int, 36, short> >) {
82 flag = 1;
83 }
84 if (!flag)
85 abort();
86
87 exit(0);
88 }
89