OSDN Git Service

2012-02-06 Fran├žois Dumont <fdumont@gcc.gnu.org>
authorfdumont <fdumont@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 6 Feb 2012 20:19:44 +0000 (20:19 +0000)
committerfdumont <fdumont@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 6 Feb 2012 20:19:44 +0000 (20:19 +0000)
* include/debug/safe_iterator.h
(_Safe_iterator::_M_before_dereferenceable): Avoid the expensive
creation of a _Safe_iterator instance to do the check.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@183941 138bc75d-0d04-0410-961f-82ee72b054a4

libstdc++-v3/ChangeLog
libstdc++-v3/include/debug/safe_iterator.h

index 799be7c..95a9a18 100644 (file)
@@ -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
index 016ec7b..e7cfe9c 100644 (file)
@@ -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?