This is the mail archive of the libstdc++@gcc.gnu.org mailing list for the libstdc++ project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[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;
 }

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]