This is the mail archive of the
libstdc++@gcc.gnu.org
mailing list for the libstdc++ project.
[libstdc++] Problems with deques (patch included)
- From: Peter Schmid <schmid at snake dot iap dot physik dot tu-darmstadt dot de>
- To: <libstdc++ at gcc dot gnu dot org>
- Cc: <gcc-patches at gcc dot gnu dot org>
- Date: Mon, 8 Jul 2002 02:03:27 +0200 (CEST)
- Subject: [libstdc++] Problems with deques (patch included)
When I use the deque class with a custom allocator, I get "member
initializers will be reordered" warnings on the main line.
Applying the appended patch fixes the problem.
Hope this helps,
Peter Schmid
source file td.C
#include<deque>
namespace ns {
template <class T>
class my_allocator {
public:
typedef T* pointer;
typedef std::size_t size_type;
template <class U>
struct rebind
{
typedef my_allocator<U> other;
};
my_allocator() throw() {}
my_allocator(const my_allocator&) throw() {}
template <class U>
my_allocator (const my_allocator<U>&) throw() {}
~my_allocator() throw() {}
pointer allocate (size_type , const void* = 0) { return 0; }
void deallocate (pointer , size_type ) {}
};
}
std::deque<int, ns::my_allocator<int> > d;
g++ -v -c -W -Wall td.C
Reading specs from /usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.2/specs
Configured with: ../gcc/configure --enable-shared --disable-nls --enable-threads=posix --enable-languages=c,c++,f77,objc,treelang
Thread model: posix
gcc version 3.2 20020707 (experimental)
/usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.2/cc1plus -quiet -v -D__GNUC__=3 -D__GNUC_MINOR__=2 -D__GNUC_PATCHLEVEL__=0 -D_GNU_SOURCE td.C -D__GNUG__=3 -D__DEPRECATED -D__EXCEPTIONS -D__GXX_ABI_VERSION=100 -quiet -dumpbase td.C -W -Wall -version -o /tmp/cc7rS88c.s
GNU C++ version 3.2 20020707 (experimental) (i686-pc-linux-gnu)
compiled by GNU C version 3.2 20020707 (experimental).
ignoring nonexistent directory "NONE/include"
ignoring nonexistent directory "/usr/local/i686-pc-linux-gnu/include"
#include "..." search starts here:
#include <...> search starts here:
/usr/local/include/c++/3.2
/usr/local/include/c++/3.2/i686-pc-linux-gnu
/usr/local/include/c++/3.2/backward
/usr/local/include
/usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.2/include
/usr/include
End of search list.
/usr/local/include/c++/3.2/bits/stl_deque.h: In constructor `
std::_Deque_alloc_base<_Tp, _Alloc, __is_static>::_Deque_alloc_base(typename
std::_Alloc_traits<_Tp, _Allocator>::allocator_type&) [with _Tp = int,
_Alloc = ns::my_allocator<int>, bool __is_static = false]':
/usr/local/include/c++/3.2/bits/stl_deque.h:460: instantiated from `std::_Deque_base<_Tp, _Alloc>::_Deque_base(typename std::_Deque_alloc_base<_Tp, _Alloc, std::_Alloc_traits<_Tp, _Allocator>::_S_instanceless>::allocator_type&, unsigned int) [with _Tp = int, _Alloc = ns::my_allocator<int>]'
/usr/local/include/c++/3.2/bits/stl_deque.h:690: instantiated from `std::deque<_Tp, _Alloc>::deque(typename std::_Deque_base<_Tp, _Alloc>::allocator_type&) [with _Tp = int, _Alloc = ns::my_allocator<int>]'
td.C:26: instantiated from here
/usr/local/include/c++/3.2/bits/stl_deque.h:391: warning: member initializers
for `ns::my_allocator<int*> std::_Deque_alloc_base<int,
ns::my_allocator<int>, false>::_M_map_allocator'
/usr/local/include/c++/3.2/bits/stl_deque.h:388: warning: and `
int**std::_Deque_alloc_base<int, ns::my_allocator<int>, false>::_M_map'
/usr/local/include/c++/3.2/bits/stl_deque.h:362: warning: will be re-ordered
to match declaration order
/usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.2/../../../../i686-pc-linux-gnu/bin/as -V -Qy -o td.o /tmp/cc7rS88c.s
GNU assembler version 020627 (i686-pc-linux-gnu) using BFD version 020627 20020627
2002-07-08 Peter Schmid <schmid@snake.iap.physik.tu-darmstadt.de>
* include/bits/stl_deque.h: Change order of member
variable declarations to avoid compiler warnings
*** libstdc++-v3/include/bits/stl_deque.h.orig Mon Jul 8 01:55:06 2002
--- libstdc++-v3/include/bits/stl_deque.h Mon Jul 8 01:55:10 2002
*************** protected:
*** 385,394 ****
_M_deallocate_map(_Tp** __p, size_t __n)
{ _M_map_allocator.deallocate(__p, __n); }
- _Tp** _M_map;
- size_t _M_map_size;
allocator_type _M_node_allocator;
_Map_allocator_type _M_map_allocator;
};
/// @if maint Specialization for instanceless allocators. @endif
--- 385,394 ----
_M_deallocate_map(_Tp** __p, size_t __n)
{ _M_map_allocator.deallocate(__p, __n); }
allocator_type _M_node_allocator;
_Map_allocator_type _M_map_allocator;
+ _Tp** _M_map;
+ size_t _M_map_size;
};
/// @if maint Specialization for instanceless allocators. @endif