И мне просто интересно как вот каждый из пунктов выглядит с кодами возврата )
Полагаю, в целой куче мест можно было бы гарантировать отсутствие исключений, например, для операторов сравнения. Если оператор сравнения в действительности может бросить исключение... Наверное, его так или иначе стоило вынести в отдельную именованную функцию. Я вообще за то, чтобы безопасные вещи писались легко, а опасные сложно. И то, что написать функцию, бросающую исключения (даже если не бросает) проще, чем небросающую — проблема дизайна языка, ещё раз, имхо