Boost logo

Boost :

Subject: [boost] boost::ptr_container: seems bug in erase_if
From: Anton Ivanov (ai_at_[hidden])
Date: 2008-12-11 03:15:11


Hi!

In ptr_sequence_adapter.hpp we have function:

        template< class Pred >
        void erase_if( iterator first, iterator last, Pred pred )
        {
            range_check(first,last);
            this->base().erase( std::remove_if( first.base(), last.base(),

void_ptr_delete_if<Pred,value_type>(pred) ),
                                this->base().end() );
        }

If we call this function with second parameter not equal to
this->base().end() then function remove not only elemets for wich pred
return true, but also all alement from last.base() to the end of
container (this->base().end()). This is seems bug due to function
documentation:

template< class Pred > void erase_if( Pred pred );
template< class Pred > void erase_if( iterator begin, iterator end, Pred
pred );

        * Requirements: Pred must take an const T& argument
        * Effects: removes all elements t for which pred(t) returns true
from the entire container or the specified range

-- 
Yours sincerely,
Anton Ivanov (ai_at_[hidden])

Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk