From: paolo Date: Fri, 9 Feb 2007 01:00:25 +0000 (+0000) Subject: 2007-02-08 Howard Hinnant X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=4eeb06cdea34b612677ed137beec7da2d45a8f21;p=thirdparty%2Fgcc.git 2007-02-08 Howard Hinnant PR libstdc++/17012 * include/bits/list.tcc (list<>::remove): Take care of &*__first == &__value. * docs/html/ext/howto.html: Add an entry for DR 526. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@121735 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 1610a6079eb5..1effedd5fd05 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,10 @@ +2007-02-08 Howard Hinnant + + PR libstdc++/17012 + * include/bits/list.tcc (list<>::remove): Take care of + &*__first == &__value. + * docs/html/ext/howto.html: Add an entry for DR 526. + 2007-02-07 Jakub Jelinek PR libgomp/28468 diff --git a/libstdc++-v3/docs/html/ext/howto.html b/libstdc++-v3/docs/html/ext/howto.html index 951e108dacd1..c3dcca4d2139 100644 --- a/libstdc++-v3/docs/html/ext/howto.html +++ b/libstdc++-v3/docs/html/ext/howto.html @@ -586,6 +586,13 @@
Construct a linear_congruential engine and seed with it.
+
526: + Is it undefined if a function in the standard changes in + parameters? +
+
Use &value. +
+
538: 241 again: Does unique_copy() require CopyConstructible and Assignable? diff --git a/libstdc++-v3/include/bits/list.tcc b/libstdc++-v3/include/bits/list.tcc index f2849fb6e52a..6bde3b77d003 100644 --- a/libstdc++-v3/include/bits/list.tcc +++ b/libstdc++-v3/include/bits/list.tcc @@ -1,6 +1,6 @@ // List implementation (out of line) -*- C++ -*- -// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006 +// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007 // Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free @@ -176,14 +176,25 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD) { iterator __first = begin(); iterator __last = end(); + iterator __extra = __last; while (__first != __last) { iterator __next = __first; ++__next; if (*__first == __value) - _M_erase(__first); + { + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 526. Is it undefined if a function in the standard changes + // in parameters? + if (&*__first != &__value) + _M_erase(__first); + else + __extra = __first; + } __first = __next; } + if (__extra != __last) + _M_erase(__extra); } template