
AMDG On 05/27/2012 04:22 PM, Eric Niebler wrote:
I'm considering taking on as a side project the unification of the bind and phoenix placeholders, a perennial source of confusion and annoyance. I hesitate before beginning because it necessarily introduces some complexity into boost.bind, a very small, simple, and light-weight library. In particular, the unification would:
1) Cause boost.bind to depend on boost.proto. (I would do what I could to keep that dependency as slight as possible.) 2) Could not be supported on all platforms; e.g. not on borland or (gcc < 4) where the placeholders are actually static inline functions(!). (Peter, is this an ODR thing?) 3) Would introduce Phoenix behaviors into Bind, insofar as _1 is a lambda such that _1(42) evaluates to 42.
At this point, it's not obvious to me that the benefits outweigh the costs. Opinions? Peter, I'd especially like to hear your thoughts.
I think this is hard to do without breaking user code. Consider: using ::_1; boost::function<int(int)> f1; bind(f1, _1); // boost::bind ... using boost::phoenix::placeholders::_1; bind(std::plus<int>(), _1, _1); // boost::phoenix::bind Unifying ::_1 and boost::phoenix::placeholders::_1 has to break one of these unless boost::bind is also the same as boost::phoenix::bind. In Christ, Steven Watanabe