blob: 221a6d79c47f13033f7f79da94e01f1f10fb3ea4 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
// { dg-do run }
// check cleanup of template temporaries
extern "C" void abort ();
extern "C" void exit (int);
int ctor = 0;
int dtor = 0;
template <class T> struct A {
A() {ctor++;}
A(int) {ctor++;}
A(const A&) {ctor++;}
~A() {dtor++;}
operator int() {return 0;}
};
template <class T> void ff(T);
template <class T> void ff(T)
{
}
void g(int)
{
}
void f()
{
int x;
A<int> a1;
A<double> a2(37);
A<long> a3 = A<long>(47);
A<short> a4 = 97;
g(A<char*>());
A<char**>();
x ? A<char*>() : A<char*>();
x = 47, A<double*>(), A<int>(39), A<void>(23), -17;
while (A<short>())
;
for (;A<unsigned>(3);)
;
if (A<A<double> >())
;
ff(A<double>());
throw 59;
}
int
main()
{
int flag = 0;
try {
A<unsigned long>();
f();
}
catch (int) {
A<float>(34);
flag = 1;
}
if (!flag)
abort();
if (!ctor || ctor != dtor)
abort();
exit(0);
}
|