I have overloaded the new and delete operator, then I found this in the source code:

// note: this should really be a member of the load_ptr function
// below but some compilers still complain about this.
template<class T>
struct heap_allocator
{
  #if 0
  // note: this fails on msvc 7.0 and gcc 3.2
  template <class U, U x> struct test;
  typedef char* yes;
  typedef int* no;
  template <class U>
  yes has_op_new(U*, test<void* (*)(std::size_t), &U::operator new>* = 0);
  no has_op_new(...);

  template<class U>
  T * new_operator(U);

  T * new_operator(yes){
  return (T::operator new)(sizeof(T));
  }
  T * new_operator(no){
  return static_cast<T *>(operator new(sizeof(T)));
  }
  static T * invoke(){
  return new_operator(has_op_new(static_cast<T *>(NULL)));
  }
  #else
  // while this doesn't handle operator new overload for class T
  static T * invoke(){
  return static_cast<T *>(operator new(sizeof(T)));
  }
  #endif
}; 


If I am using a msvc that this does not fail on, is there anything wrong with implementing this code, or will I get a bunch of errors or "hidden" bugs? Also, are there any plans on implementing this in a future release(I am guessing it is a work in progress issue)?

Thanks in advance.


/Jacob Holm