This is the mail archive of the
libstdc++@gcc.gnu.org
mailing list for the libstdc++ project.
[Patch] Sylvain's fix for libstdc++/10783
- From: Paolo Carlini <pcarlini at unitus dot it>
- To: libstdc++ at gcc dot gnu dot org
- Cc: Gabriel Dos Reis <gdr at integrable-solutions dot net>, Nathan Myers <ncm at cantrip dot org>
- Date: Fri, 23 May 2003 18:00:18 +0200
- Subject: [Patch] Sylvain's fix for libstdc++/10783
Hi everyone,
in my admittedly limited understanding of such matters, Sylvain's
fix is correct: it just changes __normal_iterator, which,
I briefly recall for the casual reader, is the implementation
defined iterator used by 'vector' and 'string'.
Tested x86-linux. Ok to fix 10783? In case, what about 3.3?
Paolo.
/////////
2003-05-23 Sylvain Pion <Sylvain.Pion@mpi-sb.mpg.de>
PR libstdc++/10783
* include/bits/stl_iterator.h (class __normal_iterator):
Don't inherit from iterator, add missing typedefs.
* testsuite/24_iterators/reverse_iterator.cc (test03): Add.
diff -urN libstdc++-v3-orig/include/bits/stl_iterator.h libstdc++-v3/include/bits/stl_iterator.h
--- libstdc++-v3-orig/include/bits/stl_iterator.h 2002-07-20 08:26:27.000000000 +0200
+++ libstdc++-v3/include/bits/stl_iterator.h 2003-05-23 15:30:09.000000000 +0200
@@ -569,16 +569,14 @@
using std::iterator;
template<typename _Iterator, typename _Container>
class __normal_iterator
- : public iterator<typename iterator_traits<_Iterator>::iterator_category,
- typename iterator_traits<_Iterator>::value_type,
- typename iterator_traits<_Iterator>::difference_type,
- typename iterator_traits<_Iterator>::pointer,
- typename iterator_traits<_Iterator>::reference>
{
protected:
_Iterator _M_current;
public:
+ typedef typename iterator_traits<_Iterator>::iterator_category
+ iterator_category;
+ typedef typename iterator_traits<_Iterator>::value_type value_type;
typedef typename iterator_traits<_Iterator>::difference_type
difference_type;
typedef typename iterator_traits<_Iterator>::reference reference;
diff -urN libstdc++-v3-orig/testsuite/24_iterators/reverse_iterator.cc libstdc++-v3/testsuite/24_iterators/reverse_iterator.cc
--- libstdc++-v3-orig/testsuite/24_iterators/reverse_iterator.cc 2002-01-17 04:59:42.000000000 +0100
+++ libstdc++-v3/testsuite/24_iterators/reverse_iterator.cc 2003-05-23 15:50:26.000000000 +0200
@@ -21,6 +21,8 @@
// 24.4.1.2 Reverse iterators
#include <iterator>
+#include <vector>
+#include <testsuite_hooks.h>
void test01()
{
@@ -75,9 +77,18 @@
test_dm(): p(current) { }
};
+// libstdc++/10783
+void test03()
+{
+ bool test = true;
+ typedef std::vector<int> V;
+ VERIFY( sizeof(V::iterator) == sizeof(V::reverse_iterator) );
+}
+
int main()
{
test01();
test02();
+ test03();
return 0;
}