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] stl_vector.h


Hello,
	Here is the patch for the bug that I had mentioned earlier on.

I ahve also attached a test-case for replicating the bug.

This bug actually helped me fix a totally unralated error in some other
part of my program!

-- 
        -Dhruv Matani.
http://www.geocities.com/dhruvbird/

The price of freedom is responsibility, but it's a bargain, because
freedom is priceless. ~ Hugh Downs

Attachment: ChangeLog
Description: Text document

#include <iostream>
#include <vector>
#include <ext/mt_allocator.h>
using namespace std;

// Do some cheating!
template<typename _Tp>
class alloc_base 
{
public:
  typedef size_t                    size_type;
  typedef ptrdiff_t                 difference_type;
  typedef _Tp*                      pointer;
  typedef const _Tp*                const_pointer;
  typedef _Tp&                      reference;
  typedef const _Tp&                const_reference;
  typedef _Tp                       value_type;

  pointer
  address(reference __x) const
  { return &__x; }

  const_pointer
  address(const_reference __x) const
  { return &__x; }

  size_type
  max_size() const throw() 
  { return size_t(-1) / sizeof(_Tp); }

  // _GLIBCXX_RESOLVE_LIB_DEFECTS
  // 402. wrong new expression in [some_] allocator::construct
  void 
  construct(pointer __p, const _Tp& __val) 
  { ::new(__p) _Tp(__val); }

  void 
  destroy(pointer __p) { __p->~_Tp(); }
};



template<typename T>
  class The_Allocator : public alloc_base<T>
  {
  public:
    typedef size_t                    size_type;
    typedef ptrdiff_t                 difference_type;
    typedef T*                      pointer;
    typedef const T*                const_pointer;
    typedef T&                      reference;
    typedef const T&                const_reference;
    typedef T                       value_type;
    
    pointer allocate(size_t n, const void* = 0)
    {
      assert(n != 0);
      return (pointer)::operator new(n * sizeof(T));
    }
    void deallocate(pointer, size_t) { }
  };

int main()
{
  vector<int, The_Allocator<int> > iv(0, 1);
}

Attachment: patch_stl_vector.h_dhruv_10102004
Description: Text document


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