Bug List: (This bug is not in your last search results)   Show last search results      Search page      Enter new bug
Bug#: 15775
Product:  
Component:  
Status: RESOLVED
Resolution: FIXED
Assigned To: Paolo Carlini <paolo.carlini@oracle.com>
Host:
Reported against  
Priority:  
Severity:  
Target Milestone:  
 
 
Target:
Reporter: Carlo Wood <carlo@gcc.gnu.org>
Add CC:
CC:
Remove selected CCs
Build:
URL:
Summary:
Keywords:
Known to work:
Known to fail:

Attachment Description Type Created Size Actions
Create a New Attachment (proposed patch, testcase, etc.) View All

Bug 15775 depends on: Show dependency tree
Show dependency graph
Bug 15775 blocks:

Additional Comments:






View Bug Activity   |   Format For Printing   |   Clone This Bug


Description:   Last confirmed: 2004-06-09 09:45 Opened: 2004-06-02 12:22
Many (if not all) STL containers use typedefs like:

      typedef value_type*                        pointer;
      typedef const value_type*                  const_pointer;
      typedef value_type&                        reference;
      typedef const value_type&                  const_reference;

However, according to the standard it should be Allocator::pointer etc.
For example, 23.2.1 Template class deque [lib.deque] says

namespace std {
  template <class T, class Allocator = allocator<T> >
  class deque {
  public:
    // types:
    typedef typename Allocator::reference         reference;
    typedef typename Allocator::const_reference   const_reference;
                                                                   // See 23.1
    typedef implementation defined                iterator;
                                                  const_iterator; // See 23.1
    typedef implementation defined
                                                                   // See 23.1
    typedef implementation defined                size_type;
                                                  difference_type; // See 23.1
    typedef implementation defined
    typedef T                                     value_type;
    typedef Allocator                             allocator_type;
    typedef typename Allocator::pointer           pointer;
    typedef typename Allocator::const_pointer     const_pointer;
    typedef std::reverse_iterator<iterator>       reverse_iterator;
    typedef std::reverse_iterator<const_iterator> const_reverse_iterator;


and since Allocator is a user specified class, it cannot be correct
to replace these 'typename Allocator::pointer' with 'value_type*'.

------- Comment #1 From Paolo Carlini 2004-06-09 09:45 -------
Confirmed: for some reason, when fixing libstdc++/13462 we didn't notice that
the problem was more general.

------- Comment #2 From Paolo Carlini 2004-06-09 10:10 -------
Notice, however, that at variance with the specific cases fixed for 13462, the
remaining containers are essentially ok (i.e., the change is only cosmetic) due
to the Standard requirements for allocators (Table 32): allocator<T>::pointer
is required to be T*, for instance.

------- Comment #3 From CVS Commits 2004-06-09 21:37 -------
Subject: Bug 15775

CVSROOT:	/cvs/gcc
Module name:	gcc
Changes by:	paolo@gcc.gnu.org	2004-06-09 21:37:47

Modified files:
	libstdc++-v3   : ChangeLog 
	libstdc++-v3/include/bits: stl_deque.h stl_list.h stl_map.h 
	                           stl_multimap.h stl_vector.h 

Log message:
	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.

Patches:
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/libstdc++-v3/ChangeLog.diff?cvsroot=gcc&r1=1.2507&r2=1.2508
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/libstdc++-v3/include/bits/stl_deque.h.diff?cvsroot=gcc&r1=1.49&r2=1.50
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/libstdc++-v3/include/bits/stl_list.h.diff?cvsroot=gcc&r1=1.40&r2=1.41
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/libstdc++-v3/include/bits/stl_map.h.diff?cvsroot=gcc&r1=1.24&r2=1.25
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/libstdc++-v3/include/bits/stl_multimap.h.diff?cvsroot=gcc&r1=1.23&r2=1.24
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/libstdc++-v3/include/bits/stl_vector.h.diff?cvsroot=gcc&r1=1.48&r2=1.49


------- Comment #4 From Benjamin Kosnik 2004-06-09 22:05 -------
paolo can you put this on gcc-3_4-branch too, at some date before 3.4.1?

thanks,
benjamin

------- Comment #5 From CVS Commits 2004-06-11 18:45 -------
Subject: Bug 15775

CVSROOT:	/cvs/gcc
Module name:	gcc
Branch: 	gcc-3_4-branch
Changes by:	paolo@gcc.gnu.org	2004-06-11 18:44:58

Modified files:
	libstdc++-v3   : ChangeLog 
	libstdc++-v3/testsuite: testsuite_performance.h 
	libstdc++-v3/include/bits: stl_deque.h stl_list.h stl_map.h 
	                           stl_multimap.h stl_vector.h 

Log message:
	2004-06-11  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.
	
	2004-06-11  Dhruv Matani  <dhruvbird@gmx.net>
	Paolo Carlini  <pcarlini@suse.de>
	
	* testsuite/testsuite_performance.h
	(resource_counter::allocated_memory): Make it return the right
	number of bytes requested by the allocators/application. This is
	the sbrk+mmaped memory.

Patches:
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/libstdc++-v3/ChangeLog.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=1.2224.2.124&r2=1.2224.2.125
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/libstdc++-v3/testsuite/testsuite_performance.h.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=1.11.4.1&r2=1.11.4.2
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/libstdc++-v3/include/bits/stl_deque.h.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=1.44.4.3&r2=1.44.4.4
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/libstdc++-v3/include/bits/stl_list.h.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=1.34.4.3&r2=1.34.4.4
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/libstdc++-v3/include/bits/stl_map.h.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=1.19.6.2&r2=1.19.6.3
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/libstdc++-v3/include/bits/stl_multimap.h.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=1.19.6.2&r2=1.19.6.3
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/libstdc++-v3/include/bits/stl_vector.h.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=1.43.4.3&r2=1.43.4.4


------- Comment #6 From Paolo Carlini 2004-06-11 18:46 -------
Fixed for 3.4.1.

Bug List: (This bug is not in your last search results)   Show last search results      Search page      Enter new bug