
Giovanni Piero Deretta wrote:
I'm not saying that egg should support optionally-lazy functions [1], it is ok if the lazy and non lazy variant have the same name. I just want to be sure it is easy to define them.
I did't adopt "optionally-lazy" functions. As you show, many functions take FunctionObjects as arguments so that protect or unlambda is needed everywhere. (I always follow the rationale "one name, one functionality".) Anyway, egg::unfuse with "contains_bind_expression<FusionSeq>" trait can easily implement such a optionally-lazy adaptor.
After all, Boost.Lambda bind and placeholders are not usable here.
Why? Detail please :)
A functional call of `static_< always<F> >::type` is expanded to F()(a1,...,aN); If F is a function pointer type, this will clearly crash. A "regular"ized Boost.Lambda functor also will crash because of uninitialized error. After all, we need a lambda functor such that default-constructed one is callable. Egg secretly has one. (I wrote it for unit testing.) See: http://tinyurl.com/yuumdv T_bind is Egg's own binder. TT_1 is Egg's own placeholder, whereas T_bll_1 is type of boost::lambda::_1. Regards, -- Shunsuke Sogame