You've answered 0 of 171 questions correctly. (Clear)

Question #323 Difficulty: 3

According to the C++23 standard, what is the output of this program?

    #include <iostream>
#include <stdexcept>

struct A {
    A(char c) : c_(c) {}
    ~A() { std::cout << c_; }
    char c_;
};

struct Y { ~Y() noexcept(false) { throw std::runtime_error(""); } };

A f() {
    try {
        A a('a');
        Y y;
        A b('b');
        return {'c'};
    } catch (...) {
    }
    return {'d'};
}

int main()
{
    f();
}

Hint:

c is not destroyed as part of the regular exit from the try block, but as part of stack unwinding after the exception gets thrown. When stack unwinding starts, the not-yet-destroyed objects created in the try block are destroyed in the reverse order of their construction.

Answer:

Problems? View a hint or try another question.

I give up, show me the answer (make 3 more attempts first).

Mode : Training

You are currently in training mode, answering random questions. Why not Start a new quiz? Then you can boast about your score, and invite your friends.

Contribute

Create your own!

Android app

Get Sergey Vasilchenko's CppQuiz Android app.

C++ Brain Teasers

Get the book, support the site! C++ Brain Teasers cover