#include <iostream>
#include <thread>
#include <stdexcept>
#include <functional>
using namespace std;
void exceptionCatcher(std::function<void()> func)
{
try {
func();
}
catch (const exception& e) {
cout << "Caught exception\n";
}
}
int main()
{
string str("Hello, world");
thread myThread2(
exceptionCatcher,
[str]{
cout << str << endl;
throw exception();
}
);
myThread2.join();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dGhyZWFkPgojaW5jbHVkZSA8c3RkZXhjZXB0PgojaW5jbHVkZSA8ZnVuY3Rpb25hbD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnZvaWQgZXhjZXB0aW9uQ2F0Y2hlcihzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gZnVuYykKewogICAgdHJ5IHsKICAgICAgICBmdW5jKCk7CiAgICB9CiAgICBjYXRjaCAoY29uc3QgZXhjZXB0aW9uJiBlKSB7CiAgICAgICAgY291dCA8PCAiQ2F1Z2h0IGV4Y2VwdGlvblxuIjsKICAgIH0KfQoKaW50IG1haW4oKQp7CglzdHJpbmcgc3RyKCJIZWxsbywgd29ybGQiKTsKCgl0aHJlYWQgbXlUaHJlYWQyKAoJCWV4Y2VwdGlvbkNhdGNoZXIsCgkJW3N0cl17CgkJCWNvdXQgPDwgc3RyIDw8IGVuZGw7CgkJCXRocm93IGV4Y2VwdGlvbigpOwoJCX0KCSk7CgogICAgbXlUaHJlYWQyLmpvaW4oKTsKCiAgICByZXR1cm4gMDsKfQ==