[Program_options] Positional options are not parsed, "unrecognised option". A bug?

Hello, everybody. I am having problems using Boost::Program_options library. I have a program, that have several optional keyword arguments, and 3 positional arguments. Keyword arguments are parsed well, but positional arguments are always causing an exception? saying: "unrecognised option" After spending 2 hours trying to find a problem, I decided to ask for help. I am using Boost 1.50.0-2, GCC 4.7.2 under Arch linux (32 bit). My example is almost exact copy from the tutorial, so I suspect that there is some bug. Example code (with all non-relevant code removed) follows. To test it, run it as following: ./a.out 123 123 test Expected behaviour is to see a line: Arguments: output=output.png width=123 height=123 Instead, I see this: terminate called after throwing an instance of 'boost::exception_detail::clone_impl<boost::exception_detail:: error_info_injector<boost::program_options::unknown_option> >' what(): unrecognised option '1' ==Test code== #include <iostream> #include <boost/program_options.hpp> using namespace std; int main( int argc, char * argv[] ) { namespace po = boost::program_options; string output_file; po::options_description desc("converter [options] width height source"); desc.add_options() ("help", "Show help message") ("output,o", po::value<string>( &output_file )->default_value("output.png"), "Output file to put converted image data to. Default is output.png") ; po::positional_options_description pos_desc; pos_desc.add("width",1).add("height",1).add("input-file",1); po::variables_map vm; po::store( po::command_line_parser(argc, argv) .options(desc) .positional(pos_desc) .run() , vm ); po::notify( vm ); if( vm.count("help") ){ cout << desc <<endl; return 0; } if (!vm.count("width") || !vm.count("height") || !vm.count("input-file") ){ cerr<<"Error: width, weight and input file must be specified"<<endl; return 1; } cout << "Arguments: output="<<output_file << " width="<<vm["width"].as<string>() << " height="<<vm["height"].as<string>()<<endl; return 0; }
participants (1)
-
Dmitry Shintyakov