#include <exception>
#include <cstdlib>
struct Check {
int obj1, obj2;
bool state;
};
static Check const data[] = {
{ 0, 0, false }, { 1, 0, true }, { 0, 0, true }, { 2, 1, true }, { 2, 2, true }, { 3, 1, true }, { 3, 3, false }, { 1, 1, false }, { 9, 9, false } };
static int pos = 0;
static void test(int obj1, int obj2, bool state)
{
if (obj1 != data[pos].obj1) abort ();
if (obj2 != data[pos].obj2) abort ();
if (state != data[pos].state) abort ();
pos++;
}
struct S {
int id;
S ();
S (const S &);
~S ();
};
static int next_id = 0;
S::S()
: id (next_id++)
{
test (id, id, std::uncaught_exception ());
}
S::S(const S &x)
: id (next_id++)
{
test (id, x.id, std::uncaught_exception ());
}
S::~S()
{
test (id, id, std::uncaught_exception ());
}
extern void foo (S *);
int main()
{
try
{
try
{
S s0;
throw s0; }
catch (S s2)
{
throw;
}
}
catch (S s3)
{
}
return 0;
}