#include <iostream>
#include <stdlib.h>
using namespace std;
#define MAXERR 10
class MaxError {};
class Error{
public:
Error();
void Say();
private:
static int count;
};
void Run() throw(Error);
void trapper();
void zapper();
int Error::count;
int main()
{
set_unexpected(trapper);
set_terminate(zapper);
for(;;)
{
try{ Run(); }
catch(Error e){ e.Say(); }
}
}
void Run() throw(Error)
{
//throw Error();
throw "Невідомий тип об'єкта";
}
void trapper()
{
cout << "Обробник непередбачених ситуаций." << endl;
throw Error();
}
void zapper()
{
cout << "Обробник завершення функції" << endl;
exit(-1);
}
Error::Error()
{
count++;
if (count > MAXERR)
throw MaxError();
}
void Error::Say()
{
cout << count << endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RkbGliLmg+CiAKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAojZGVmaW5lIE1BWEVSUiAxMApjbGFzcyBNYXhFcnJvciB7fTsKIApjbGFzcyBFcnJvcnsKcHVibGljOgogIEVycm9yKCk7CiAgdm9pZCBTYXkoKTsKcHJpdmF0ZToKICBzdGF0aWMgaW50IGNvdW50Owp9OwogCnZvaWQgUnVuKCkgdGhyb3coRXJyb3IpOwp2b2lkIHRyYXBwZXIoKTsKdm9pZCB6YXBwZXIoKTsKIAppbnQgRXJyb3I6OmNvdW50OwogCmludCBtYWluKCkKewogIHNldF91bmV4cGVjdGVkKHRyYXBwZXIpOwogIHNldF90ZXJtaW5hdGUoemFwcGVyKTsKICBmb3IoOzspCiAgewogICAgdHJ5eyBSdW4oKTsgfQogICAgY2F0Y2goRXJyb3IgZSl7IGUuU2F5KCk7IH0KICB9Cn0KIAp2b2lkIFJ1bigpIHRocm93KEVycm9yKQp7CiAgLy90aHJvdyBFcnJvcigpOwogIHRocm93ICLQndC10LLRltC00L7QvNC40Lkg0YLQuNC/INC+0LEn0ZTQutGC0LAiOwp9CiAKdm9pZCB0cmFwcGVyKCkKewogIGNvdXQgPDwgItCe0LHRgNC+0LHQvdC40Log0L3QtdC/0LXRgNC10LTQsdCw0YfQtdC90LjRhSDRgdC40YLRg9Cw0YbQuNC5LiIgPDwgZW5kbDsKICB0aHJvdyBFcnJvcigpOwp9CiAKdm9pZCB6YXBwZXIoKQp7CiAgY291dCA8PCAi0J7QsdGA0L7QsdC90LjQuiDQt9Cw0LLQtdGA0YjQtdC90L3RjyDRhNGD0L3QutGG0ZbRlyIgPDwgZW5kbDsKICBleGl0KC0xKTsKfQogCkVycm9yOjpFcnJvcigpCnsKICBjb3VudCsrOwogIGlmIChjb3VudCA+IE1BWEVSUikKICAgIHRocm93IE1heEVycm9yKCk7Cn0KIAp2b2lkIEVycm9yOjpTYXkoKQp7CiAgY291dCA8PCBjb3VudCA8PCBlbmRsOwp9