#include <iostream>
#include <string>
using namespace std;
struct TestRuntime {
int operator()()
{
std::string ().replace (100, 1, 1, 'c');
return 1;
}
};
struct TestExc {
int operator()(int a, int b)
{
throw new std::exception;
return a/b;
}
};
int main() {
{
// Test handle build-in exception
TestRuntime t1;
try {
int d = t1();
} catch (std::exception &e) {
cout << "t1: std exception: " << e.what() << endl;
} catch (...) {
cout << "t1: unknown exception" << endl;
}
}
{
// Test handle "new" exception
TestExc t2;
try {
int d = t2(2,3);
} catch (std::exception &e) {
cout << "t2: std exception: " << e.what() << endl;
} catch (...) {
cout << "t2: unknown exception" << endl;
}
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnN0cnVjdCBUZXN0UnVudGltZSB7CiAgaW50IG9wZXJhdG9yKCkoKQogIHsKICAgICBzdGQ6OnN0cmluZyAoKS5yZXBsYWNlICgxMDAsIDEsIDEsICdjJyk7CiAgICAgcmV0dXJuIDE7CiAgfQp9OwoKCnN0cnVjdCBUZXN0RXhjIHsKICBpbnQgb3BlcmF0b3IoKShpbnQgYSwgaW50IGIpCiAgewogICAgIHRocm93IG5ldyBzdGQ6OmV4Y2VwdGlvbjsKICAgICByZXR1cm4gYS9iOwogIH0KfTsKCmludCBtYWluKCkgewoJCiAgIHsKICAgICAgLy8gVGVzdCBoYW5kbGUgYnVpbGQtaW4gZXhjZXB0aW9uCiAgICAgIFRlc3RSdW50aW1lIHQxOwogICAgICB0cnkgewogICAgICAgIGludCBkID0gdDEoKTsgICAgICAKICAgICAgfSBjYXRjaCAoc3RkOjpleGNlcHRpb24gJmUpIHsKICAgICAgICBjb3V0IDw8ICJ0MTogc3RkIGV4Y2VwdGlvbjogIiA8PCBlLndoYXQoKSA8PCBlbmRsOwogICAgICB9IGNhdGNoICguLi4pIHsKICAgICAgICBjb3V0IDw8ICJ0MTogdW5rbm93biBleGNlcHRpb24iIDw8IGVuZGw7CiAgICAgIH0KICAgfQoKICAgewogICAgICAvLyBUZXN0IGhhbmRsZSAibmV3IiBleGNlcHRpb24KICAgICAgVGVzdEV4YyB0MjsKICAgICAgdHJ5IHsKICAgICAgICBpbnQgZCA9IHQyKDIsMyk7ICAgICAgCiAgICAgIH0gY2F0Y2ggKHN0ZDo6ZXhjZXB0aW9uICZlKSB7CiAgICAgICAgY291dCA8PCAidDI6IHN0ZCBleGNlcHRpb246ICIgPDwgZS53aGF0KCkgPDwgZW5kbDsKICAgICAgfSBjYXRjaCAoLi4uKSB7CiAgICAgICAgY291dCA8PCAidDI6IHVua25vd24gZXhjZXB0aW9uIiA8PCBlbmRsOwogICAgICB9CiAgIH0KCglyZXR1cm4gMDsKfQ==