Проверка спецификаций исключений - часть 2
// ключевое слово nothrow отсутствует: // f() разрешено возбуждать любые исключения прямо или косвенно void f() { // ... }
// f() запрещено возбуждать любые исключения прямо или косвенно, // проверяется на этапе компиляции void f() nothrow
{ // ... }
void f() {
// здесь можно возбуждать исключения прямо или косвенно
nothrow { // nothrow-блок
// код, находящийся в данном блоке никаких исключений возбуждать // не должен, проверяется на этапе компиляции
}
// здесь снова можно возбуждать исключения
}
Еще одним неудачным решением является возможность возбуждать исключения любых (даже встроенных!) типов. Правильным решением является введение специального базового класса для всех возбуждаемых исключений с изначально заложенной в нем специфической функциональностью.