$include_dir="/home/hyper-archives/boost-users/include"; include("$include_dir/msg-header.inc") ?>
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