diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 799be7c5d4e5c2d5f7d10feed29cfe8e27fe6b3e..95a9a181935f61cac84afc0528ff344059adbf97 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,9 @@ +2012-02-06 François Dumont <fdumont@gcc.gnu.org> + + * include/debug/safe_iterator.h + (_Safe_iterator::_M_before_dereferenceable): Avoid the expensive + creation of a _Safe_iterator instance to do the check. + 2012-02-05 Jonathan Wakely <jwakely.gcc@gmail.com> PR libstdc++/52104 diff --git a/libstdc++-v3/include/debug/safe_iterator.h b/libstdc++-v3/include/debug/safe_iterator.h index 016ec7b9418ca52f1cecaf7ca8a3594b21edd20e..e7cfe9c9d53b8564cee49fac52cbf0059ba7a236 100644 --- a/libstdc++-v3/include/debug/safe_iterator.h +++ b/libstdc++-v3/include/debug/safe_iterator.h @@ -380,8 +380,12 @@ namespace __gnu_debug bool _M_before_dereferenceable() const { - _Self __it = *this; - return __it._M_incrementable() && (++__it)._M_dereferenceable(); + if (this->_M_incrementable()) + { + _Iterator __base = base(); + return ++__base != _M_get_sequence()->_M_base().end(); + } + return false; } /// Is the iterator incrementable?