$include_dir="/home/hyper-archives/boost-users/include"; include("$include_dir/msg-header.inc") ?>
From: Thorsten Ottosen (tottosen_at_[hidden])
Date: 2006-02-17 06:54:07
Bill Buklis wrote:
> The following code does not successfully compile:
> 
> boost::ptr_map<int,int>	testmap;
> 
> testmap.erase(5);
> 
> 
> The compiler (MSVC 7.1) complains that the identifier "find" is unknown
> inside the erase function (see below). The class does have a find function
> as "testmap.find(5)" compiles as expected. I expect it's a mismatch with the
> embedded classes.
> 
> Taken directly from associate_ptr_container.hpp:
> 
> size_type erase( const key_type& x ) // nothrow
> {
>     BOOST_ASSERT( !this->empty() );        
>     iterator i = find( x );			// ERROR ON THIS LINE
>     if( i == this->end() )
>         return 0;
>     this->remove( i );
>     return this->c_private().erase( i.base() );
> }
> 
> 
> The following workaround does work at least, but the above should also,
> shouldn't it?
It should work :-) This was a bug in the version that you're using. The 
new implementation is
       size_type erase( const key_type& x ) // nothrow
         {
             iterator i( this->c_private().find( x ) );  // nothrow
             if( i == this->end() )                      // nothrow
                 return 0u;                              // nothrow
             this->remove( i );                          // nothrow
             return this->c_private().erase( x );        // nothrow
         }
-Thorsten