White RoomNEW White Room DSA

Half Built Widget

struct A { A(){ std::puts("A ctor"); } ~A(){ std::puts("A dtor"); } };
struct B { B(){ std::puts("B ctor"); } ~B(){ std::puts("B dtor"); } };

struct Widget {
    A a;
    B b;
    Widget() { throw std::runtime_error("boom"); }
    ~Widget() { std::puts("Widget dtor"); }
};

int main() {
    try { Widget w; }
    catch (...) { std::puts("caught"); }
}

What does this print?