#include <iostream>
#include <exception>
#include <stdexcept>
class Application {
public:
Application() {}
bool connect() {
std::cout << "connecting" << std::endl;
return true;
}
void disconnect() {
std::cout << "disconnecting" << std::endl;
}
~Application() {
disconnect();
if (std::uncaught_exception()) {
createCrashReport();
}
}
protected:
void createCrashReport() {
std::cerr << "Application was halted by an exception" << std::endl;
}
};
void riskyThing() {
throw std::runtime_error("Fuck you!");
}
void foo() {
Application app;
app.connect();
riskyThing();
}
int main() {
foo();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8ZXhjZXB0aW9uPgojaW5jbHVkZSA8c3RkZXhjZXB0PgoKY2xhc3MgQXBwbGljYXRpb24gewpwdWJsaWM6CglBcHBsaWNhdGlvbigpIHt9CgkKCWJvb2wgY29ubmVjdCgpIHsKCQlzdGQ6OmNvdXQgPDwgImNvbm5lY3RpbmciIDw8IHN0ZDo6ZW5kbDsKCQlyZXR1cm4gdHJ1ZTsKCX0KCQoJdm9pZCBkaXNjb25uZWN0KCkgewoJCXN0ZDo6Y291dCA8PCAiZGlzY29ubmVjdGluZyIgPDwgc3RkOjplbmRsOwoJfQoKCX5BcHBsaWNhdGlvbigpIHsKCQlkaXNjb25uZWN0KCk7CgkJCgkJaWYgKHN0ZDo6dW5jYXVnaHRfZXhjZXB0aW9uKCkpIHsKCQkJY3JlYXRlQ3Jhc2hSZXBvcnQoKTsKCQl9Cgl9CnByb3RlY3RlZDoKCXZvaWQgY3JlYXRlQ3Jhc2hSZXBvcnQoKSB7CgkJc3RkOjpjZXJyIDw8ICJBcHBsaWNhdGlvbiB3YXMgaGFsdGVkIGJ5IGFuIGV4Y2VwdGlvbiIgPDwgc3RkOjplbmRsOwoJfQp9OwoKdm9pZCByaXNreVRoaW5nKCkgewoJdGhyb3cgc3RkOjpydW50aW1lX2Vycm9yKCJGdWNrIHlvdSEiKTsKfQoKdm9pZCBmb28oKSB7CglBcHBsaWNhdGlvbiBhcHA7CglhcHAuY29ubmVjdCgpOwoKCXJpc2t5VGhpbmcoKTsKfQoKaW50IG1haW4oKSB7Cglmb28oKTsKCQoJcmV0dXJuIDA7Cn0=