This is the mail archive of the
libstdc++@gcc.gnu.org
mailing list for the libstdc++ project.
[Patch/RFC] Fix libstdc++/15775
- From: Paolo Carlini <pcarlini at suse dot de>
- To: libstdc++ <libstdc++ at gcc dot gnu dot org>
- Date: Wed, 09 Jun 2004 14:51:28 +0200
- Subject: [Patch/RFC] Fix libstdc++/15775
Hi,
in my reading of the standard, due to the requirements for allocators
(20.1.5,
in particular Table 32 and 20.1.5, p4) strictly speaking the library is
correct as is, in the sense that, f.i.,
typedef value_type* pointer;
is equivalent to
typedef typename _Alloc::pointer pointer;
However, we are already using the latter syntax (exactly that specified
in the
standard) in set e multiset and seems good, for consistency, to use it
also for
the other containers.
Anything I'm missing?
Otherwise I'll commit soon the below to mainline, tested x86-linux.
Thanks,
Paolo.
//////////////
2004-06-09 Paolo Carlini <pcarlini@suse.de>
PR libstdc++/15775
* include/bits/stl_deque.h: Consistently with stl_set.h, define
pointer as allocator's pointer, likewise for reference,
const_pointer, and const_reference.
* include/bits/stl_list.h: Likewise.
* include/bits/stl_map.h: Likewise.
* include/bits/stl_multimap.h: Likewise.
* include/bits/stl_vector.h: Likewise.
diff -prN libstdc++-v3-orig/include/bits/stl_deque.h libstdc++-v3/include/bits/stl_deque.h
*** libstdc++-v3-orig/include/bits/stl_deque.h Wed Apr 21 16:06:00 2004
--- libstdc++-v3/include/bits/stl_deque.h Wed Jun 9 14:05:33 2004
*************** namespace _GLIBCXX_STD
*** 595,608 ****
public:
typedef _Tp value_type;
! typedef value_type* pointer;
! typedef const value_type* const_pointer;
typedef typename _Base::iterator iterator;
typedef typename _Base::const_iterator const_iterator;
typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
typedef std::reverse_iterator<iterator> reverse_iterator;
- typedef value_type& reference;
- typedef const value_type& const_reference;
typedef size_t size_type;
typedef ptrdiff_t difference_type;
typedef typename _Base::allocator_type allocator_type;
--- 595,608 ----
public:
typedef _Tp value_type;
! typedef typename _Alloc::pointer pointer;
! typedef typename _Alloc::const_pointer const_pointer;
! typedef typename _Alloc::reference reference;
! typedef typename _Alloc::const_reference const_reference;
typedef typename _Base::iterator iterator;
typedef typename _Base::const_iterator const_iterator;
typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
typedef std::reverse_iterator<iterator> reverse_iterator;
typedef size_t size_type;
typedef ptrdiff_t difference_type;
typedef typename _Base::allocator_type allocator_type;
diff -prN libstdc++-v3-orig/include/bits/stl_list.h libstdc++-v3/include/bits/stl_list.h
*** libstdc++-v3-orig/include/bits/stl_list.h Wed Apr 21 16:06:00 2004
--- libstdc++-v3/include/bits/stl_list.h Wed Jun 9 14:06:35 2004
*************** namespace _GLIBCXX_STD
*** 394,411 ****
typedef _List_base<_Tp, _Alloc> _Base;
public:
! typedef _Tp value_type;
! typedef value_type* pointer;
! typedef const value_type* const_pointer;
! typedef _List_iterator<_Tp> iterator;
! typedef _List_const_iterator<_Tp> const_iterator;
! typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
! typedef std::reverse_iterator<iterator> reverse_iterator;
! typedef value_type& reference;
! typedef const value_type& const_reference;
! typedef size_t size_type;
! typedef ptrdiff_t difference_type;
! typedef typename _Base::allocator_type allocator_type;
protected:
// Note that pointers-to-_Node's can be ctor-converted to
--- 394,411 ----
typedef _List_base<_Tp, _Alloc> _Base;
public:
! typedef _Tp value_type;
! typedef typename _Alloc::pointer pointer;
! typedef typename _Alloc::const_pointer const_pointer;
! typedef typename _Alloc::reference reference;
! typedef typename _Alloc::const_reference const_reference;
! typedef _List_iterator<_Tp> iterator;
! typedef _List_const_iterator<_Tp> const_iterator;
! typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
! typedef std::reverse_iterator<iterator> reverse_iterator;
! typedef size_t size_type;
! typedef ptrdiff_t difference_type;
! typedef typename _Base::allocator_type allocator_type;
protected:
// Note that pointers-to-_Node's can be ctor-converted to
diff -prN libstdc++-v3-orig/include/bits/stl_map.h libstdc++-v3/include/bits/stl_map.h
*** libstdc++-v3-orig/include/bits/stl_map.h Fri Apr 16 21:04:03 2004
--- libstdc++-v3/include/bits/stl_map.h Wed Jun 9 14:02:22 2004
*************** namespace _GLIBCXX_STD
*** 126,142 ****
public:
// many of these are specified differently in ISO, but the following are
// "functionally equivalent"
! typedef typename _Rep_type::allocator_type allocator_type;
! typedef typename _Rep_type::reference reference;
! typedef typename _Rep_type::const_reference const_reference;
! typedef typename _Rep_type::iterator iterator;
! typedef typename _Rep_type::const_iterator const_iterator;
! typedef typename _Rep_type::size_type size_type;
! typedef typename _Rep_type::difference_type difference_type;
! typedef typename _Rep_type::pointer pointer;
! typedef typename _Rep_type::const_pointer const_pointer;
! typedef typename _Rep_type::reverse_iterator reverse_iterator;
! typedef typename _Rep_type::const_reverse_iterator const_reverse_iterator;
// [23.3.1.1] construct/copy/destroy
// (get_allocator() is normally listed in this section, but seems to have
--- 126,142 ----
public:
// many of these are specified differently in ISO, but the following are
// "functionally equivalent"
! typedef typename _Alloc::pointer pointer;
! typedef typename _Alloc::const_pointer const_pointer;
! typedef typename _Alloc::reference reference;
! typedef typename _Alloc::const_reference const_reference;
! typedef typename _Rep_type::allocator_type allocator_type;
! typedef typename _Rep_type::iterator iterator;
! typedef typename _Rep_type::const_iterator const_iterator;
! typedef typename _Rep_type::size_type size_type;
! typedef typename _Rep_type::difference_type difference_type;
! typedef typename _Rep_type::reverse_iterator reverse_iterator;
! typedef typename _Rep_type::const_reverse_iterator const_reverse_iterator;
// [23.3.1.1] construct/copy/destroy
// (get_allocator() is normally listed in this section, but seems to have
diff -prN libstdc++-v3-orig/include/bits/stl_multimap.h libstdc++-v3/include/bits/stl_multimap.h
*** libstdc++-v3-orig/include/bits/stl_multimap.h Fri Apr 16 21:04:03 2004
--- libstdc++-v3/include/bits/stl_multimap.h Wed Jun 9 14:02:05 2004
*************** namespace _GLIBCXX_STD
*** 142,160 ****
public:
// many of these are specified differently in ISO, but the following are
// "functionally equivalent"
typedef typename _Rep_type::allocator_type allocator_type;
- typedef typename _Rep_type::reference reference;
- typedef typename _Rep_type::const_reference const_reference;
typedef typename _Rep_type::iterator iterator;
typedef typename _Rep_type::const_iterator const_iterator;
typedef typename _Rep_type::size_type size_type;
typedef typename _Rep_type::difference_type difference_type;
- typedef typename _Rep_type::pointer pointer;
- typedef typename _Rep_type::const_pointer const_pointer;
typedef typename _Rep_type::reverse_iterator reverse_iterator;
typedef typename _Rep_type::const_reverse_iterator const_reverse_iterator;
-
// [23.3.2] construct/copy/destroy
// (get_allocator() is also listed in this section)
/**
--- 142,159 ----
public:
// many of these are specified differently in ISO, but the following are
// "functionally equivalent"
+ typedef typename _Alloc::pointer pointer;
+ typedef typename _Alloc::const_pointer const_pointer;
+ typedef typename _Alloc::reference reference;
+ typedef typename _Alloc::const_reference const_reference;
typedef typename _Rep_type::allocator_type allocator_type;
typedef typename _Rep_type::iterator iterator;
typedef typename _Rep_type::const_iterator const_iterator;
typedef typename _Rep_type::size_type size_type;
typedef typename _Rep_type::difference_type difference_type;
typedef typename _Rep_type::reverse_iterator reverse_iterator;
typedef typename _Rep_type::const_reverse_iterator const_reverse_iterator;
// [23.3.2] construct/copy/destroy
// (get_allocator() is also listed in this section)
/**
diff -prN libstdc++-v3-orig/include/bits/stl_vector.h libstdc++-v3/include/bits/stl_vector.h
*** libstdc++-v3-orig/include/bits/stl_vector.h Mon Apr 26 11:02:43 2004
--- libstdc++-v3/include/bits/stl_vector.h Wed Jun 9 14:03:49 2004
*************** namespace _GLIBCXX_STD
*** 153,171 ****
typedef vector<_Tp, _Alloc> vector_type;
public:
! typedef _Tp value_type;
! typedef value_type* pointer;
! typedef const value_type* const_pointer;
typedef __gnu_cxx::__normal_iterator<pointer, vector_type> iterator;
typedef __gnu_cxx::__normal_iterator<const_pointer, vector_type>
const_iterator;
! typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
! typedef std::reverse_iterator<iterator> reverse_iterator;
! typedef value_type& reference;
! typedef const value_type& const_reference;
! typedef size_t size_type;
! typedef ptrdiff_t difference_type;
! typedef typename _Base::allocator_type allocator_type;
protected:
/** @if maint
--- 153,171 ----
typedef vector<_Tp, _Alloc> vector_type;
public:
! typedef _Tp value_type;
! typedef typename _Alloc::pointer pointer;
! typedef typename _Alloc::const_pointer const_pointer;
! typedef typename _Alloc::reference reference;
! typedef typename _Alloc::const_reference const_reference;
typedef __gnu_cxx::__normal_iterator<pointer, vector_type> iterator;
typedef __gnu_cxx::__normal_iterator<const_pointer, vector_type>
const_iterator;
! typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
! typedef std::reverse_iterator<iterator> reverse_iterator;
! typedef size_t size_type;
! typedef ptrdiff_t difference_type;
! typedef typename _Base::allocator_type allocator_type;
protected:
/** @if maint