BUG IN boost::ptr_set erase

Hi, I think I've found a bug when trying to use boost::ptr_set that stops my code from compiling Pseudo code to reproduce the compiler error: // declare a ptr_set typedef boost::ptr_set<CTask> CTasks; CTasks iTasks; void DestroyTask(const CTask& aTask) { iTasks.erase(iTasks.find(aTask)); // Compiles ok iTasks.erase(aTask); // Compiler complains } The error line from the compiler is c:\program files\boost\boost_1_34_0\boost\ptr_container\detail\associative_ptr_container.hpp(106) : error C2664: 'std::_Tree<_Traits>::iterator std::_Tree<_Traits>::find(void *const &)' : cannot convert parameter 1 from 'const CTask' to 'void *const &' Taking a look in associative_ptr_container.hpp 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 } This function should be: size_type erase( const key_type& x ) // nothrow { iterator i( this->c_private().find( const_cast<key_type*>(&x) ) ); // nothrow if( i == this->end() ) // nothrow return 0u; // nothrow this->remove( i ); // nothrow return this->c_private().erase( const_cast<key_type*>(&x) ); // nothrow } It now compiles! As I'm not a boost developer I'd appreciate if someone responsible could verify the fix and submit it if its ok ;-) thanks Sam

Sam Lievesley skrev:
Hi,
I think I've found a bug when trying to use boost::ptr_set that stops my code from compiling
[snip]
This function should be:
size_type erase( const key_type& x ) // nothrow { iterator i( this->c_private().find( const_cast<key_type*>(&x) ) ); // nothrow if( i == this->end() ) // nothrow return 0u; // nothrow this->remove( i ); // nothrow return this->c_private().erase( const_cast<key_type*>(&x) ); // nothrow }
It now compiles! As I'm not a boost developer I'd appreciate if someone responsible could verify the fix and submit it if its ok ;-)
I'll look into this. The fix might work for set, but I need to investigate if map works also. Thanks -Thorsten
participants (2)
-
Sam Lievesley
-
Thorsten Ottosen