std::auto_ptr<T> release_ptr( T *p, boost::ptr_vector<T,C,A>& vec) { std::auto_ptr<T> result; for( typename boost::ptr_vector<T,C,A>::iterator it( vec.begin()), e( vec.end()); it != e; ++it) { if( &(*it) == p) { typename boost::ptr_vector<T,C,A>::auto_type ptr = vec.release( it); result.reset( ptr.release()); break; } } return result; }