What does a single "throw;" statement do?

If you do a throw; on its own, and there isn't a current exception for it to rethrow, then the program ends abruptly. (More specifically, terminate() is called.)

Note that throw; is the only safe way to re-throw the current exception - it's not equivalent to

catch (exception const & e) { throw e; }


Yes, it specified behavior, it will call terminate;

15.1, para 8: If no exception is presently being handled, executing a throw expression with no operand calls terminate() (15.5.1).


That's so-called exception handler. It rethrows the "current exception" if any. If there's no exception currently being handled terminate() will be called.