#include <iostream>
#include <memory>
struct Foo {
int x_;
Foo (int const x): x_(x) {
if (x == 1) {
throw x;
}
}
~Foo() { std::cerr << "foo_" << x_ << " destroyed" << std::endl; }
};
struct Bar {
std::shared_ptr<Foo> foo_0;
std::shared_ptr<Foo> foo_1;
std::shared_ptr<Foo> foo_2;
Bar():
foo_0 (std::make_shared<Foo>(0)),
foo_1 (std::make_shared<Foo>(1)),
foo_2 (std::make_shared<Foo>(2)) {
}
~Bar() {
std::cerr << "Bar destroyed" << std::endl;
}
};
void xul() {
Bar bar;
}
int main() {
try { xul(); } catch (...) { return EXIT_FAILURE; }
}
ICAgI2luY2x1ZGUgPGlvc3RyZWFtPgogICAgI2luY2x1ZGUgPG1lbW9yeT4KCiAgICBzdHJ1Y3QgRm9vIHsKICAgICAgICBpbnQgeF87CiAgICAgICAgRm9vIChpbnQgY29uc3QgeCk6IHhfKHgpIHsKICAgICAgICAgICAgaWYgKHggPT0gMSkgewogICAgICAgICAgICB0aHJvdyB4OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIH5Gb28oKSB7IHN0ZDo6Y2VyciA8PCAiZm9vXyIgPDwgeF8gPDwgIiBkZXN0cm95ZWQiIDw8IHN0ZDo6ZW5kbDsgfQogICAgfTsKCiAgICBzdHJ1Y3QgQmFyIHsKICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8Rm9vPiBmb29fMDsKICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8Rm9vPiBmb29fMTsKICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8Rm9vPiBmb29fMjsKICAgICAgICBCYXIoKTogCiAgICAgICAgICAgIGZvb18wIChzdGQ6Om1ha2Vfc2hhcmVkPEZvbz4oMCkpLAogICAgICAgICAgICBmb29fMSAoc3RkOjptYWtlX3NoYXJlZDxGb28+KDEpKSwKICAgICAgICAgICAgZm9vXzIgKHN0ZDo6bWFrZV9zaGFyZWQ8Rm9vPigyKSkgewogICAgICAgIH0KICAgICAgICB+QmFyKCkgewogICAgICAgICAgICBzdGQ6OmNlcnIgPDwgIkJhciBkZXN0cm95ZWQiIDw8IHN0ZDo6ZW5kbDsKICAgICAgICB9CiAgICB9OwoKICAgIHZvaWQgeHVsKCkgewogICAgICAgIEJhciBiYXI7CiAgICB9CgogICAgaW50IG1haW4oKSB7CiAgICAgICAgdHJ5IHsgeHVsKCk7IH0gY2F0Y2ggKC4uLikgeyByZXR1cm4gRVhJVF9GQUlMVVJFOyB9CiAgICB9