[Bug c++/24061] New: Documentation in /tr1/hashtable proposes possibly misleading change
atavory at gmail dot com
gcc-bugzilla@gcc.gnu.org
Sun Sep 25 23:59:00 GMT 2005
/tr1/hashtable lines 1318-132 documents hashtable::erase(const_iterator i)
It states:
"The return type should be const_iterator,
and it should return the iterator following the one we've erased.
That would simplify range erase."
However, if erase would return an iterator, range-erase would not work the way
the comment suggests. The comment (probably) refers to code like the following
(attempting to erase values whose key is larger than 20):
for(typename T::iterator i = t.begin(); i != t.end();)
if(i->first > 20)
i = t.erase(i); // (*)
else
++i;
This looks simple, but it probably won't work. The line marked by (*) might
resize the container, which will rehash/reposition all values. The iterator i
might point to values already accessed, or might have skipped passt values not
yet accessed, or both. tr1 is correct: t.erase(i) cannot return any meaningful
iterator.
--
Summary: Documentation in /tr1/hashtable proposes possibly
misleading change
Product: gcc
Version: 4.0.0
Status: UNCONFIRMED
Severity: minor
Priority: P3
Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: atavory at gmail dot com
CC: gcc-bugs at gcc dot gnu dot org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=24061
More information about the Gcc-bugs
mailing list