Как вы знаете, у С++ 11 есть ключевое слово noexcept. Теперь уродливая часть об этом:
Обратите внимание, что спецификация noexcept для функции не является временем компиляции проверить; это всего лишь способ программиста сообщить компилятору независимо от того, должна ли функция генерировать исключения.
http://en.cppreference.com/w/cpp/language/noexcept_spec
Так что это сбой дизайна в части комитета или они просто оставили его как упражнение для компиляторов:) в некотором смысле, что достойные компиляторы будут его применять, а плохие могут быть совместимы?
Кстати, если вы спросите, почему нет третьего варианта (иначе это может быть сделано), причина в том, что я могу легко думать о (медленном) способе проверить, может ли функция выбраться или нет. Проблема не в курсе, если вы ограничиваете ввод 5 и 7 (иначе я обещаю, что файл не будет содержать ничего рядом с 5 и 7), и он бросает только тогда, когда вы даете ему 33, но это нереальная проблема ИМХО.