7 Expressions [expr]

7.6 Compound expressions [expr.compound]

7.6.18 Throwing an exception [expr.throw]

	throw  assignment-expression
A throw-expression is of type void.
Evaluating a throw-expression with an operand throws an exception; the type of the exception object is determined by removing any top-level cv-qualifiers from the static type of the operand and adjusting the type from “array of T” or function type T to “pointer to T.
A throw-expression with no operand rethrows the currently handled exception.
The exception is reactivated with the existing exception object; no new exception object is created.
The exception is no longer considered to be caught.
Code that must be executed because of an exception, but cannot completely handle the exception itself, can be written like this:
try {
  // ...
} catch (...) {     // catch all exceptions
  // respond (partially) to exception
  throw;            // pass the exception to some other handler
— end example
If no exception is presently being handled, evaluating a throw-expression with no operand calls std​::​​terminate().