Boost logo

Boost Users :

Subject: Re: [Boost-users] [xpressive] Shouldn't external placeholder variables allow consts?
From: Eric Niebler (eric_at_[hidden])
Date: 2009-10-12 10:47:09


Ami Ganguli wrote:
> I came across an interesting problem:
>
> what.let(_placeholder = this);
>
> fails to compile, because 'this' is a const pointer.
>
> A simple workaround:
>
> MyClass *_this = this;
> what.let(_placeholder = _this);
>
> But surely this shouldn't be necessary? Couldn't the right hand side
> of the let be declared const?

Interesting! Yes, the placeholder code in xpressive seems to assume that
the rhs of the let expression is a non-const lvalue. That's certainly
not the case for "this". But even code as simple as this fails to compile:

     placeholder<int> _i;
     smatch what;
     what.let(_i = 1);

I'm not quite sure how to handle this at the moment. What should happen
with actions like "[ _i += 1 ]" if "_i" ends up bound to something that
isn't a mutable lvalue? It's possible that we need a way to specify a
placeholder for non-mutable data. Maybe this:

     placeholder<int const> _i;

... and now an action like "[ _i += 1 ]" can be made to fail at compile
time.

You should open a ticket for this: http://svn.boost.org. Thanks.

-- 
Eric Niebler
BoostPro Computing
http://www.boostpro.com

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