
Peter Dimov wrote:
Eric Niebler wrote:
Peter Dimov wrote:
Eric Niebler wrote:
Although I don't know all the details of bind and lambda, I had hoped that _1 and _2 would be abstract proto entities, such that
_1 == _2
creates an expression template like:
equal< terminal< arg<1> >, terminal< arg<2> > >
which is a generic, abstract representation of an equals expression with two placeholders. Can't bind and lambda both be implemented to recognize such a type and do the appropriate thing with it? Possibly, if they are made to honor is_bind_expression specializations and result_of, if is_bind_expression reports true for the above type, if the above is a function object that actually returns x == y, and if result_of works for it. Yes, that can all be made to work without much difficulty.
The part about boost::bind using is_bind_expression and result_of cannot, not without major surgery and possibly compromising portability.
I'll have to take your word for it -- I'm not familiar enough with the TR1 bind to appreciate the difficulty of respecting is_bind_expression. It seems to me that is_bind_expression can be trivially implemented, given appropriately defined placeholders. Eg. if they are defined in a super-secret hidden namespace, like so: namespace super_secret_hidden { template<class I> struct arg { typedef I arity; }; template<class T> yes_type is_bind_expression_impl(T const *); } no_type is_bind_expression_impl(void const *); Now _1 is: proto::terminal<super_secret_hidden::arg<mpl::int_<1> > >::type const _1 = {{}}; And is_bind_expression<> is trivially implementable using ADL and sizeof. Should work for older compilers, too, right? Are their compilers we support that don't do ADL? Result_of support for older compilers ... I suppose that requires partial template specialization, right? Do we still support compilers that don't do PTS?
Sometimes I get excited about the new C++0x features and tell myself, why not rewrite boost::bind to take advantage of them? Then it occurs to me that C++0x has a std::bind built-in. :-) (Happened twice so far.)
Haha! -- Eric Niebler Boost Consulting www.boost-consulting.com