
Suppose I'm tying to build a nested lambda expression, like so (typename...::type omitted for simplicity): lambda<higher_order_func<lambda<foo<_1> >, _2> > - Is this legal? - Does the _1 refer to the first argument of the inner lambda, or of the outer lambda? - Can the above be overridden? I.e. what if I want to refer to the arguments of both lambdas within the inner lambda?

Geoffrey Romer writes:
Suppose I'm tying to build a nested lambda expression, like so (typename...::type omitted for simplicity):
lambda<higher_order_func<lambda<foo<_1> >, _2> >
- Is this legal?
Yes, although the semantics is probably not what you are trying to achieve: for the purpose of inline metafunction composition, 'lambda' is just a metafunction without any special status, and is treated as such. The 'apply' test (http://cvs.sourceforge.net/viewcvs.py/boost/boost/libs/mpl/test/apply.cpp?rev=1.5&view=markup) actually illustrates this and similar cases well.
- Does the _1 refer to the first argument of the inner lambda, or of the outer lambda?
The outer one.
- Can the above be overridden? I.e. what if I want to refer to the arguments of both lambdas within the inner lambda?
It's not currently supported, but it's on the TODO list -- see http://thread.gmane.org/gmane.comp.lib.boost.devel/115924. -- Aleksey Gurtovoy MetaCommunications Engineering

On 10/5/05, Aleksey Gurtovoy <agurtovoy@meta-comm.com> wrote:
Geoffrey Romer writes:
Suppose I'm tying to build a nested lambda expression, like so (typename...::type omitted for simplicity):
lambda<higher_order_func<lambda<foo<_1> >, _2> > ... - Does the _1 refer to the first argument of the inner lambda, or of the outer lambda?
The outer one.
Is that also true if the inner lambda were a bind?

Geoffrey Romer writes:
On 10/5/05, Aleksey Gurtovoy <agurtovoy@meta-comm.com> wrote:
Geoffrey Romer writes:
Suppose I'm tying to build a nested lambda expression, like so (typename...::type omitted for simplicity):
lambda<higher_order_func<lambda<foo<_1> >, _2> > ... - Does the _1 refer to the first argument of the inner lambda, or of the outer lambda?
The outer one.
Is that also true if the inner lambda were a bind?
No, bind expressions are passed through 'lambda' untouched. From http://cvs.sourceforge.net/viewcvs.py/boost/boost/libs/mpl/test/apply.cpp?rev=1.5&view=markup: MPL_TEST_CASE() { typedef bind2<plus<>,_1,_1> b1; typedef lambda<b1>::type b2; MPL_ASSERT(( is_same< b1,b2 > )); } HTH, -- Aleksey Gurtovoy MetaCommunications Engineering
participants (2)
-
Aleksey Gurtovoy
-
Geoffrey Romer