Boost logo

Boost :

From: Vladimir Prus (ghost_at_[hidden])
Date: 2005-02-08 03:08:26


Lars Iversen wrote:

> I assume that the constructor for
> program_options::basic_command_line_parser (and function
> program_options::parse_command_line) in
> boost/boost/boost/program_options/parsers.hpp revision 1.11 could accept
> pointers to const char instead of non-const pointers?!

There's a problem. The standard says that the two-parameter 'main' has this
prototype:

  int main(int ac, char* av[])

Note: there's no const there. If I make the above functions accept const
parameters, users will have to do manual conversions. Try this:

  void do_it(const char* av[]) {}

  int main(int ac, char* av[])
  {
      do_it(av);
      return 0;
  }

It won't compile:

   argv.cpp:8: error: invalid conversion from `char**' to `const char**'

Such convertion is now allowed without explicit cast because it can be used
to break const-correctness in a very subtle way, and:

- many users will be confused by this error
- requiring manual cast for parsing argv is overkill

I don't have better solution than using non-const argument to
parse_command_line. Maybe, this should go to FAQ?

- Volodya


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk