On Saturday 09 November 2002 04:10 am, Aleksey Gurtovoy wrote: > A crazy thought - how about enabling something like this: [snip code] > In other words, can we allow a zero-arity 'function<...>' to treat ordinary > values as first-class function objects?
Do we want to? I think not, because boost::function will lose its ability to safely replace function pointers. At present, boost::function function objects either support the same syntax and (nearly) the same semantics as function pointers, or the syntax will fail to compile on boost::function. I'm worried about this case: typedef bool (*when_to_stop_callback)(); bool stop_if_user_intervention(); // ... expensive_action.when_to_stop = &stop_if_user_intervention; expensive_action.do_it(); expensive_action.when_to_stop = 0; If when_to_stop_callback is changed to a have type function<bool()>, we have a problem: the code still compiles, but now the final line (assignment to zero) has different semantics: it assigns a function object that always returns false. #include your friendly local lambda header and you can do this: boost::function<int ()> f1 = constant(-1); Aside from that, I'm not sure it's implementable. We would need a way to tell if an arbitrary class type is a function object or not. If we can do this, we will have solved the is_callable problem and Boost.Function will become very useful indeed :) Doug _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost