Boost logo

Boost Users :

Subject: [Boost-users] program_options: accepting NaNs for doubles
From: Rhys Ulerich (rhys.ulerich_at_[hidden])
Date: 2011-08-11 12:55:22


Hi all,

program_options does not accept NaN or Inf as valid double input. For example,
the following sequence modifies the "Getting Started" first.cpp [1] to accept
double input:

    cp $BOOST_SOURCE/libs/program_options/example/first.cpp .
    perl -pi -e 's/<int>/<double>/;' first.cpp
    LDFLAGS="-lboost_program_options" make first # ...or whatever

The modified example indeed barfs on NaN or Inf input:

    $ ./first --compression=5.5
    Compression level was set to 5.5.

    $ ./first --compression=Inf
    error: in option 'compression': invalid option value 'Inf'

    $ ./first --compression=NaN
    error: in option 'compression': invalid option value 'NaN'

Two questions:

1) Does this count as a bug? 'std::cin >> foo' doesn't grok Inf or NaNs (on my
system anyhow) but methods like strtod() do. Users providing explicit
infinities or not-a-numbers as options parameters likely don't do so
accidentally. This Inf/NaN behavior is not mentioned in the active tickets.

2) Can anyone suggest a workaround (shy of using string-based parameters and
calling strtod myself)?

Thanks,
Rhys

[1] http://www.boost.org/doc/libs/1_47_0/doc/html/program_options/tutorial.html#id2190970


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net