Пустая спецификация исключений дает гарантии пользователю того что функция не генерит исключения. А если все-таки происходит генерация, и в списке такого исключения нет, то вызывается пользовательская unexpected(), если есть, иначе вызывается terminate(), который тоже можно подменить. А terminate() в итоге вызывает abort().