
On 04/04/09 12:41, Larry Evans wrote: [snip]
Now, if B==F==push_front, this would produce a palindrome:
[x1,x2,x3,x3,x2,x1]
This is demonstrated by the attached program which produces on cout:
***test_iter_fold_if<1> numbers=: value:0 ***test_iter_fold_if<1> result::state=: r_iter:0 r_iter:1 r_iter:1 r_iter:1 r_iter:0
[snip]
However, I 've not figured out where the extra number (1 in case of iter_fold_if<1> and 2 in case of iter_fold_if<2>) is coming from. OTOH, I haven't tried very hard to figure it out.
The previous attachment should have had: push_front<arg<1>,deref<arg<2> > > instead of: push_front<arg<1>,arg<2> > as both the ForwardOp and BackwardOp. Also, the BackwardPredicate should have been: protect < aux::iter_fold_if_pred < always<true_> , typename end<numbers>::type > > With those changes, the correct palindrome is produced. Just as the ForwardPredicate is "augmented" with protection against dereferencing the end<numbers>::type in this code: https://svn.boost.org/trac/boost/browser/trunk/boost/mpl/iter_fold_if.hpp#L4... shouldn't the BackwardPredicate also be augmented with the same protection here: https://svn.boost.org/trac/boost/browser/trunk/boost/mpl/iter_fold_if.hpp#L7... ? -regards, Larry the B