Boost logo

Boost Users :

Subject: Re: [Boost-users] program_option parsing error
From: Marek Skalický (mskalick_at_[hidden])
Date: 2015-09-29 08:00:28


Vladimir Prus píše v Čt 24. 09. 2015 v 12:13 +0300:
> Hi Marek,
>
> On 23-Sep-15 4:41 PM, Marek Skalický wrote:
> > Hello everyone,
> > I have a question about program_option library.
> >
> > If I have argv=["binaryname", "--port", "5"] and port have set
> > default_value=6 and implicit_value=7 what should be the value of port
> > after parsing argv?
>
> It should be 5.
>
> default_value does not matter because the --port option is provided
> implicit_value does not matter because the --port option includes a value explicitly

Thanks.

>
> > I am asking because this test
> > https://github.com/mongodb/mongo/blob/0481c958daeb2969800511e7475dc66986fa9ed5/src/mongo/util/options_parser/options_parser_test.cpp#L753 is failing with boost 1.59 (with boost 1.58 it is passing). Does someone please know what changed in this new version?
>
> Does this issue reproduces when using program_options directly? The code above appears to use classes that are
> similar, but not the same.

I separated boost code. However, this code still fails:
"
namespace po = boost::program_options;

po::options_description boostOptions;
po::positional_options_description boostPositionalOptions;

std::vector<const char*> argv_buffer;
argv_buffer.push_back("binaryname");
argv_buffer.push_back("--port");
argv_buffer.push_back("5");
int argc = argv_buffer.size();

int style = (((po::command_line_style::unix_style ^
                           po::command_line_style::allow_guessing) |
                          po::command_line_style::allow_long_disguise) ^
                         po::command_line_style::allow_sticky);

std::auto_ptr<po::typed_value<std::string> >
boostTypeBuilder(po::value<std::string>());
boostTypeBuilder->implicit_value("7");

std::auto_ptr<po::value_semantic> boostType;
boostType = boostTypeBuilder;

boostOptions.add_options()("port", boostType.release(), "Port");
po::command_line_parser(argc, (argc > 0 ? &argv_buffer[0] : NULL)).
                          options(boostOptions).
                          positional(boostPositionalOptions).
                          style(style);.
                          run();
"

What is wrong? Or is this a bug in Boost?

Thanks,
Marek


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