You've answered 0 of 171 questions correctly. (Clear)
Question #323 Difficulty:
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.
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
Android app
Get Sergey Vasilchenko's CppQuiz Android app.
C++ Brain Teasers
Get the book, support the site!