container icon indicating copy to clipboard operation
container copied to clipboard

set::iterator should be constant

Open alexkaratarakis opened this issue 4 years ago • 0 comments

boost::container::set's iterator is a mutable iterator. This allows modification of keys, which can destroy the container's invariants, for example when using the erase-remove idiom. This used to be a defect in std::set as well but has been fixed. As can be seen in cppreference

iterator | Constant LegacyBidirectionalIterator
const_iterator | Constant LegacyBidirectionalIterator

and in stdlib:

      // _GLIBCXX_RESOLVE_LIB_DEFECTS
      // DR 103. set::iterator is required to be modifiable,
      // but this allows modification of keys.
      typedef typename _Rep_type::const_iterator	 iterator;
      typedef typename _Rep_type::const_iterator	 const_iterator;

alexkaratarakis avatar Jan 13 '21 23:01 alexkaratarakis