
// PROPOSED CHANGE IN SOME FUTURE PAPER
unsigned long n = std::accumulate( xs.begin(), xs.end(), 0UL, long (long lhs, X const &rhs) // inline fn with no name. { return lhs + rhs.count; } );
Yeah, but do you propose to make local names visible inside the anonymous function, or not? If you do, you open a big can of worms for implementations (recursive nested functions, need I say more?), if you don't, BLL can still do things that anonymous functions can not. Anonymous functors could help some, but their syntax won't be quite as compact as your example above.
...Max...
In my plan, variables would have same scope in a function as they do now. i.e. variables local to std::accumulate are not visible in the anonymous fn. And yes its not a panacea. For instance, what about static variables in an anonymous function. Do they have the lifetime of the program, or does the anonymous function have a "lifetime" of the calling function? e.g. unsigned long foo (vector<X> const &xs) unsigned long n = std::accumulate( xs.begin(), xs.end(), 0UL, unsigned long (unsigned long lhs, X const &rhs) // inline fn with no name. { static unsigned long y = 0; return ++y * (lhs + rhs.count); } ); return n; } int main() { vector<X> xs; // ... initialize xs unsigned long a = foo(xs); unsigned long b = foo(xs); a == b; // depends on the lifetime of foo::anonymous::y return 0; } In this case perhaps a functor created with a mix of BLL and an anonymous functions would be clear. Yours, -Gary-