https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68190
--- Comment #2 from Howard Hinnant <howard.hinnant at gmail dot com> --- LWG 103 isn't the issue. http://melpon.org/wandbox/permlink/MzOWaFpvFRtgaa7t C::iterator is std::_Rb_tree_const_iterator<int> C::const_iterator is std::_Rb_tree_const_iterator<int> C::find(1u) returns std::_Rb_tree_iterator<int> s.erase returns a std::_Rb_tree_const_iterator<int> which can not be converted into a std::_Rb_tree_iterator<int>. If C::find(1u) returned a C::iterator (as specified in 23.4.6.1) instead of a std::_Rb_tree_iterator<int>, this bug would be fixed.