template<typename T>
struct Allocator : public std::allocator<T> {
  Allocator()
  {
  }
  template<class Other>
  Allocator( const Allocator<Other>& _Right )
  {
  }

  inline typename std::allocator<T>::pointer allocate(typename std::allocator<T>::size_type n, typename std::allocator<void>::const_pointer = 0)
  {
    std::cout << "Allocating: " << n << " itens." << std::endl;
    return reinterpret_cast<typename std::allocator<T>::pointer>(::operator new(n * sizeof (T));); 
  }

  inline void deallocate(typename std::allocator<T>::pointer p, typename std::allocator<T>::size_type n) {
    std::cout << "Dealloc: " <<  n << " itens." << std::endl;
    ::operator delete(p); 
  }

  template<typename U>
  struct rebind {
  typedef Allocator<U> other;
  };
};