container
container copied to clipboard
set::iterator should be constant
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;