89 lines
1.1 KiB
C
89 lines
1.1 KiB
C
// { dg-do run }
|
|
// check EH with templates
|
|
extern "C" void abort ();
|
|
extern "C" void exit (int);
|
|
|
|
template <class T, int n, class U> struct A {
|
|
A() {}
|
|
A(const char*) {}
|
|
};
|
|
|
|
void f1()
|
|
{
|
|
throw *(new A<double, 47, A<int, 37, short> >);
|
|
}
|
|
|
|
void f2()
|
|
{
|
|
throw *(new A<double, 47, A<int, 36, short> >);
|
|
}
|
|
|
|
void f3()
|
|
{
|
|
throw A<double, 47, A<int, 37, short> > ("howdy");
|
|
}
|
|
|
|
void f4()
|
|
{
|
|
throw A<double, 47, A<int, 36, short> > ("hi michey");
|
|
}
|
|
|
|
int main()
|
|
{
|
|
int flag;
|
|
|
|
flag = 0;
|
|
try {
|
|
f1();
|
|
}
|
|
catch (A<double, 47, A<int, 36, short> >) {
|
|
abort();
|
|
}
|
|
catch (A<double, 47, A<int, 37, short> >) {
|
|
flag = 1;
|
|
}
|
|
if (!flag)
|
|
abort();
|
|
|
|
flag = 0;
|
|
try {
|
|
f2();
|
|
}
|
|
catch (A<double, 47, A<int, 36, short&> >) {
|
|
abort();
|
|
}
|
|
catch (A<double, 47, A<int, 36, short> >) {
|
|
flag = 1;
|
|
}
|
|
if (!flag)
|
|
abort();
|
|
|
|
flag = 0;
|
|
try {
|
|
f3();
|
|
}
|
|
catch (A<double, 47, A<int, 36, short> >) {
|
|
abort();
|
|
}
|
|
catch (A<double, 47, A<int, 37, short> >) {
|
|
flag = 1;
|
|
}
|
|
if (!flag)
|
|
abort();
|
|
|
|
flag = 0;
|
|
try {
|
|
f4();
|
|
}
|
|
catch (A<double, 47, A<int, 36, short&> >) {
|
|
abort();
|
|
}
|
|
catch (A<double, 47, A<int, 36, short> >) {
|
|
flag = 1;
|
|
}
|
|
if (!flag)
|
|
abort();
|
|
|
|
exit(0);
|
|
}
|