С чистой стандартной точки зрения вы правы. program_options должны бросать классы, полученные из runtime_error
или logic_error
в зависимости от того, является ли ошибка временем выполнения или логическим.
С практической точки зрения, я еще не видел код C ++, который принимает полезные решения на основе того, является ли исключение logic_error
или runtime_error
. В конце концов, единственная причина, по которой вы выбрали logic_error
, а не разрешить файл assert, - это если вы хотите как-то попробовать, и это не отличается от восстановления от ошибки времени выполнения. Лично я рассматриваю logic_error
vs. runtime_error
так же, как проверенные исключения в Java, теоретически приятные, но не полезные на практике. Это означает, что, возможно, я просто сделаю program_options::error
результатом exception
. То есть, когда я нахожу это «свободное время», о котором все говорят.