Согласен с предыдущим оратором...
У меня сложилось мнение, что исключения в С++ появились как результат перегрузки операций и наличие конструкторов.
Ибо при перегрузке операций никаких дополнительных параметров задавать нельзя. И конструкторы тоже не возвращают значений. А дополнительный параметр в конструкторе - это тоже не фонтан, хотя и можно. Прикиньте, при объявлении и инициализации объекта типа комплексное число помимо мнимой и действительной части надо задавать еще и параметр для индикации возможной ошибки. Это сразу нарушает главный принцип: новый тип данных не должен отличаться от встроенных.
Я согласен, что аппарат исключения в С++ - не фонтан. Но это - явный аппарат обработки ошибок, который в тексте программы БРОСАЕТСЯ в глаза. В отличие от кодов ошибок. А это - важное свойство.
С другой стороны, во всех промышленных языках такой аппарат есть. Знакомить с ним надо. В общем - тут у меня большие сомнения.