
Hi Jaakko,
struct functor { typedef int result_type; int operator()(int i) const { return i+1; }; };
transform_iterator<functor, vector<int>::iterator> it(v.begin()); (cout << _1)(*it);
This does not compile, because operator* of transform_iterator return rvalue which can't be bound to non-const reference that operator() of the lambda expression accepts.
Forwarding problem again :(
Alas.
For a limited number of placeholders (up until _3) or so, we could provide the extra overloads to make this problem go away.
Yes, please! I did not ever tried to write BLL expressions with 3 parameters, so I'd really like perfect forwarding limited for 3 arguments.
N-ary operator() requires 2^N overloads, so for current BLL it is feasible, for bind with placeholders up to _9 (or more?) not really.
Right. I think what is needed is *some* solution which would allow to explore FP, not necessary allow using FP in all situations. Perfect forwarding for 3 arguments looks fine. - Volodya