
On 04/27/08 20:50, David Abrahams wrote:
on Fri Mar 07 2008, Steven Watanabe <watanabesj-AT-gmail.com> wrote:
AMDG
Giovanni Piero Deretta wrote:
It seems a perfect application for fold:
template<typename Seq> struct or_seq : mpl::apply< mpl::fold<mpl::_1, mpl::false_, mpl::quote2<mpl::or_> > , Seq > {};
template<typename Seq> struct and_seq : mpl::apply< mpl::fold<mpl::_1, mpl::true_, mpl::quote2<mpl::and_> > , Seq > {};
Not quite, because we want it to short circuit. Not to mention that quote2 will not work on and_ and or_.
Yeah, these should be rewritten in terms of mpl::find. Not sure why mpl::apply was used here either, though maybe I'm missign something.
The curren mpl::find uses and_ indirectly (in iter_fold_if.hpp:46). Would such a recursive implementation still work? Anyway, J.Fletcher is now attempting a variadic template rewrite of mpl:;find: http://sourceforge.net/mailarchive/message.php?msg_name=F0DEE5AE9F6027488C06... which doesn't use and_; however, another alternative which does short-circuit is attached. It uses eval_if to short-circuit the evaluation. Fletcher's find, OTOH, used if_; however, I think that's just because he's not interested in optimization yet. A very similar or_ is done by simply exchanging the Zero and One parameters. Interestingly enough, the current and_ uses a similar pattern in that it recursively calls a template (and.hpp:23). The attached (with the similar or.hpp) passes the logical.cpp test.