+2006-10-17 Paolo Carlini <pcarlini@suse.de>
+
+ PR libstdc++/26020
+ * include/bits/stl_iterator_base_funcs.h (advance): Convert
+ distance parameter to iterator_traits<>::difference_type.
+ * testsuite/24_iterators/26020.cc: New.
+
2006-10-17 Benjamin Kosnik <bkoz@redhat.com>
* include/tr1/random.tcc: Fixup long line.
// Functions used by iterators -*- C++ -*-
-// Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006
+// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
template<typename _BidirectionalIterator, typename _Distance>
inline void
__advance(_BidirectionalIterator& __i, _Distance __n,
- bidirectional_iterator_tag)
+ bidirectional_iterator_tag)
{
// concept requirements
__glibcxx_function_requires(_BidirectionalIteratorConcept<
advance(_InputIterator& __i, _Distance __n)
{
// concept requirements -- taken care of in __advance
- std::__advance(__i, __n, std::__iterator_category(__i));
+ typename iterator_traits<_InputIterator>::difference_type __d = __n;
+ std::__advance(__i, __d, std::__iterator_category(__i));
}
_GLIBCXX_END_NAMESPACE
--- /dev/null
+// Copyright (C) 2006 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING. If not, write to the Free
+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+// USA.
+
+// 24.3.4 Iterator operations
+
+#include <iterator>
+#include <list>
+#include <testsuite_hooks.h>
+
+//libstdc++/26020
+void test01()
+{
+ using namespace std;
+ bool test __attribute__((unused)) = true;
+
+ list<int> ll;
+ ll.push_back(1);
+
+ list<int>::iterator it(ll.begin());
+
+ advance(it, 0.5);
+
+ VERIFY( it == ll.begin() );
+}
+
+int main()
+{
+ test01();
+ return 0;
+}