Boost logo

Boost :

Subject: Re: [boost] Boost.Local Review
From: Vicente J. Botet Escriba (vicente.botet_at_[hidden])
Date: 2011-11-17 12:10:40


Le 17/11/11 13:15, Lorenzo Caminiti a écrit :
> On Thu, Nov 17, 2011 at 4:33 AM, Vicente Botet<vicente.botet_at_[hidden]> wrote:
>> lcaminiti wrote:
>> I have not used yet C++ lambdas, couldn't the following be used to support
>> const binding?
>>
>> xtype x;
>> xtype const& xcr; // const binder
>> [xcr]() {
>> assert( xcr == 0 );
>> }();
> I can't check with a C++11 compiler right now, but my understand is
> "yes". Using decltype, you don't even have to repeat the type (to make
> maintenance easier). I think the most general way to write that is:
>
> xtype x;
> decltype(x) const& const_ref_x = x;
> [xcr]() {
> assert( const_ref_x == 0 );
> }();
>
> The down sides are:
> 1) The lambda cannot refer to the bound variable using its original
> name x (this will actually look very strange in Boost.Contract if I
> had to indicate the user to use some magic names for variables in
> constant assertions).
> 2) The extra type manipulation.
>
Could you add the preceding lambda alternative to the Alternative
sections once you could verify it?
> I would instead prefer the following if C++11 allowed it:
>
> xtype x;
> [const&x]() {
> assert( x == 0 );
> }();
>
> But C++11 only allows to qualify the bind with the reference&x and
> not with the additional const const&x.
Maybe it is worth to post the idea to the comp.lang.c++ ML.

Best,
Vicente


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