
Zhuo Qiang wrote:
I've just tried it and there's a question:
int i = 1;
let(_a = _1) [ cout << --_a << ' ' ](i); cout << i << endl;
the output of above is : 0 0 and I expected it to be "0 1" seems _a hold a "reference" to _1 which in turn is just a reference of i.Is it right? I thought _a = _1 had some value semantic.
That's right. That's the correct behavior. As noted in the docs: The type of the local variable assumes the type of the lambda-expression. Type deduction is reference preserving. For example: let(_a = arg1, _b = 456) _a assumes the type of arg1: a reference to an argument, while _b has type int. This is necessary because otherwise, we won't have l-value access to outer lambda-scopes.
though the following code gives what I expect: int i = 1;
let(_a = val(_1)) [ cout << --_a << ' ' ](i); cout << i << endl;
Exactly! args are L-values. vals are R-values. I'll emphasize that in the docs. Mind if I steal your example? Regards, -- Joel de Guzman http://www.boost-consulting.com http://spirit.sf.net