Boost logo

Boost Users :

Subject: Re: [Boost-users] Boost program_options
From: Steve Nolen (drnuke_at_[hidden])
Date: 2009-08-24 11:29:17


Date: Sat, 22 Aug 2009 10:22:40 +0400
From: Vladimir Prus <vladimir_at_[hidden]>
To: boost-users_at_[hidden]
Subject: Re: [Boost-users] Boost program_options
Message-ID: <h6o2r1$j2f$1_at_[hidden]>
Content-Type: text/plain; charset=us-ascii

Steve Nolen wrote:

> > in program_options::parse_command_line - why can't the the argument
> > "argv" be of type 'const charT*' rather than 'charT*'?
> >
> > i ask because our unit tests were giving a bunch of errors because they
> > were written like this..
> >
> > vector< char* > cmdLine;
> > cmdLine.push_back( "someExec" );
> > cmdLine.push_back( "--optflag1" );
> > cmdLine.push_back( "value1" );
> > etc.
> >
> > then...
> > char ** argv = &cmdLine[ 0 ];
> >
> > then passing this to parse_command_line. when we compile under g++ 4.x
> > we get warnings that assigning string literals to char* is a deprecated
> > conversion. Actually I agree with the rationale, but this leaves me
> > with a problem calling parse_command_line. Is it going to change any of
> > these values?
>

No, it's not actually changing anything.

> > I know the c standard calls for the argv in main's prototype to be
> > non-const, but why can't parse_command_line be more restrictive?
>

Because it that case, you won't be able to pass main's argv to parse_command_line.

- Volodya

---------------------
ok why not? you would be passing a non-const (main::argv) to a const qualified parameter. this would just guarantee that the function couldn't modify it (which is what you're telling me is the case here). i thought this was allowed.

-steve


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