The bug is in the documentation.
All of the compilers are right. The complier can choose to evaluate
i=2 before _1+i which results in the lambda functor

  _1 + 2

or _1+i before i=2 which gives

  _1 + 1

Anyway, the point of the documentation was to say that the lambda functor
stores the value of i at the time of creating the lambda functor, and
the actual argument to later replace _1 will be passed by reference.
So no side effects via the stored arguments.
The example in the docs is just badly chosen.

  Jaakko



On Fri, 30 May 2003, firingme wrote:

> consider the following code :
>
> test.cpp
> *************************************************************
> #include <boost/lambda/lambda.hpp>
> #include <boost/lambda/bind.hpp>
>
> #include <list>
> #include <algorithm>
> #include <iostream>
> #include <vector>
>
> using namespace std ;
> using namespace boost ;
> using namespace boost::lambda;
>
> int main(){
>  int i = 1 ;
>  cout << ( _1+i)(i=2) << endl;
> }
> *************************************************************
>
> Result Table:
> *************************************************************
> Compiler                               Result
>
> VC7.1                                    4
> GCC3.2.3 ( MingW versiong )              4
> GCC3.3   (i686-pc-cygwin)                3
>
> as in lambda's doc , the result should be 3 .
>
> Any help is welcome
>
>
> thx
>
>
>
>
>
>
> _______________________________________________
> Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost
>
_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost

Reply via email to