8 Expressions [expr]

8.17 Throwing an exception [expr.throw]

throw-expression:
	throw  assignment-expressionopt

А throw-expressionимеет тип void.

Вычисление throw-expressionс операндом throws an exception; Тип объекта исключения определяется удалением любого верхнего уровня cv-qualifiers из статического типа операнда и изменением типа с «массив T» или типа функции T на «указатель на T».

A throw-expression без операнда повторно генерирует currently handled exception. Исключение повторно активируется существующим объектом исключения; новый объект исключения не создается. Исключение больше не считается обнаруженным. [ Example: Код, который должен быть выполнен из-за исключения, но не может полностью обработать само исключение, можно записать следующим образом:

try {
    // ...
} catch (...) {     // catch all exceptions
  // respond (partially) to exception
  throw;            // pass the exception to some other handler
}

end example]

Если в настоящее время не обрабатывается никаких исключений, выполняется оценка throw-expression без вызовов операндов std​::​​terminate().