What does C++ standard say should happen for the following code when there is no pending exception being processed higher up the stack?
try {
throw;
} catch (...) {
cerr << "Caught exception." << endl;
}
Will the throw with no object be caught or not?
From the 2003 C++ Standard §15.1[except.throw]/8:
If no exception is presently being handled, executing a throw-expression with no operand calls terminate()
.
So, in your example, since no exception is currently being handled, nothing is thrown and instead terminate()
is called. Since terminate()
does not return, your catch
block will never be entered.