#include <iostream>
struct A
{
~A() { std::cout << "A::~A" << std::endl; }
};
struct B : public A
{
~B() { std::cout << "B::~B" << std::endl; }
};
void throwit()
{
throw B{};
}
int main()
{
std::cout << "beginning main scope" << std::endl;
{
std::cout << "beginning inner scope" << std::endl;
try
{
std::cout << "calling throwit()" << std::endl;
throwit();
}
catch (A& a)
{
std::cout << "caught exception" << std::endl;
}
std::cout << "ending inner scope" << std::endl;
}
std::cout << "ending main scope" << std::endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKc3RydWN0IEEKewoJfkEoKSB7IHN0ZDo6Y291dCA8PCAiQTo6fkEiIDw8IHN0ZDo6ZW5kbDsgfQp9OwoKc3RydWN0IEIgOiBwdWJsaWMgQQp7Cgl+QigpIHsgc3RkOjpjb3V0IDw8ICJCOjp+QiIgPDwgc3RkOjplbmRsOyB9Cn07Cgp2b2lkIHRocm93aXQoKQp7Cgl0aHJvdyBCe307Cn0KCmludCBtYWluKCkKewoJc3RkOjpjb3V0IDw8ICJiZWdpbm5pbmcgbWFpbiBzY29wZSIgPDwgc3RkOjplbmRsOwoJCgl7CgkJc3RkOjpjb3V0IDw8ICJiZWdpbm5pbmcgaW5uZXIgc2NvcGUiIDw8IHN0ZDo6ZW5kbDsKCQkKCQl0cnkKCQl7CgkJCXN0ZDo6Y291dCA8PCAiY2FsbGluZyB0aHJvd2l0KCkiIDw8IHN0ZDo6ZW5kbDsKCQkJdGhyb3dpdCgpOwoJCX0KCQljYXRjaCAoQSYgYSkKCQl7CgkJCXN0ZDo6Y291dCA8PCAiY2F1Z2h0IGV4Y2VwdGlvbiIgPDwgc3RkOjplbmRsOwoJCX0KCQkKCQlzdGQ6OmNvdXQgPDwgImVuZGluZyBpbm5lciBzY29wZSIgPDwgc3RkOjplbmRsOwoJfQoJCglzdGQ6OmNvdXQgPDwgImVuZGluZyBtYWluIHNjb3BlIiA8PCBzdGQ6OmVuZGw7Cn0=