
On Feb 20, 2013, at 4:05 PM, Nathan Ridge <zeratul976@hotmail.com> wrote:
I'm proposing to change the interface to:
template<typename InputIterator, typename OutputIterator, typename Predicate> std::pair<InputIterator, OutputIterator> copy_while ( InputIterator first, InputIterator last, OutputIterator result, Predicate p );
i.e, changing the return type to return both iterators.
I think that certainly a change needs to be made to accomodate the extra information. I wonder how wise it is to return a pair that when the InputIterator type is the same as the OutputIterator type that it could be mistaken for, and accepted by, range algorithms as input? (That's my fault - doh!)
An alternative would be to take the 'first' iterator by reference. Boost.Spirit uses this approach.
I just realized another reason not to like this. If your prototype looks like this: template<typename InputIterator, typename OutputIterator, typename Predicate> OutputIterator copy_while ( InputIterator &first, InputIterator last, OutputIterator result, Predicate ); you can't call it like this: copy_while ( v.begin (), v.end (), out, pred ); -- Marshall Marshall Clow Idio Software <mailto:mclow.lists@gmail.com> A.D. 1517: Martin Luther nails his 95 Theses to the church door and is promptly moderated down to (-1, Flamebait). -- Yu Suzuki