Opened 13 years ago

Closed 12 years ago

#3288 closed Bugs (fixed)

Mismatching return types in intrusive::unordered_set and underlying hashtable_impl erase_and_dispose

Reported by: florian.baumert@… Owned by: Ion Gaztañaga
Milestone: Boost 1.45.0 Component: intrusive
Version: Boost 1.39.0 Severity: Problem
Keywords: Cc:

Description

In intrusive::unordered_set, it is defined as:

462	   template<class Disposer>
463	   iterator erase_and_dispose(const_iterator i, Disposer disposer)
464	   {  return table_.erase_and_dispose(i, disposer);  }
465	
466	   #if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
467	   template<class Disposer>
468	   iterator erase_and_dispose(iterator i, Disposer disposer)
469	   {  return this->erase_and_dispose(const_iterator(i), disposer);   }
470	   #endif

whereas hashtable_impl defines the same functions (calles by unordered_set) as

1299	   template<class Disposer>
1300	   void erase_and_dispose(const_iterator i, Disposer disposer)
1301	   {
1302	      priv_erase(i, disposer, optimize_multikey_t());
1303	      this->priv_size_traits().decrement();
1304	      priv_erasure_update_cache();
1305	   }
1306	
1307	   #if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
1308	   template<class Disposer>
1309	   iterator erase_and_dispose(iterator i, Disposer disposer)
1310	   {  return this->erase_and_dispose(const_iterator(i), disposer);   }
1311	   #endif

If you call erase_and_dispose with a const_iterator, the compiler has a point in saying that he can not convert void to iterator.

Change History (1)

comment:1 by Ion Gaztañaga, 12 years ago

Milestone: Boost-1.45.0
Resolution: fixed
Status: newclosed

Fixed for Boost 1.45 in release branch

Note: See TracTickets for help on using tickets.