Search code examples
c++boostbooleancommand-line-argumentsboost-program-options

Boost.Program_Options: When <bool> is specified as a command-line option, what are valid command-line parameters?


Given the following simple use of Boost.Program_Options:

boost::program_options::options_description options("Options");

options.add_options()

    ("my_bool_flag,b", boost::program_options::value<bool>(), "Sample boolean switch)")

    ;

... what command-line arguments will evaluate to false, and what to true?

(I.e., assume the program is named "foo", and executed on the command line as: foo -b ? ... with the question mark a placeholder for some other text: What are all possible text options that will properly evaluate to false, and what to true?)


Solution

  • Looking at $(BOOST_ROOT)/libs/program_options/src/value_semantic.cpp you can find:

    /* Validates bool value.
        Any of "1", "true", "yes", "on" will be converted to "1".<br>
        Any of "0", "false", "no", "off" will be converted to "0".<br>
        Case is ignored. The 'xs' vector can either be empty, in which
        case the value is 'true', or can contain explicit value.
    */
    BOOST_PROGRAM_OPTIONS_DECL void validate(any& v, const vector<string>& xs,
                       bool*, int)
    {
        check_first_occurrence(v);
        string s(get_single_string(xs, true));
    
        for (size_t i = 0; i < s.size(); ++i)
            s[i] = char(tolower(s[i]));
    
        if (s.empty() || s == "on" || s == "yes" || s == "1" || s == "true")
            v = any(true);
        else if (s == "off" || s == "no" || s == "0" || s == "false")
            v = any(false);
        else
            boost::throw_exception(invalid_bool_value(s));
    }