Re: VC++ 6.0 workaround for partial specialization
Thanks for the quick replay! The problem concerns the partial
specializations in my code, here it is again with error descriptions at the
corresponding lines:
#include <cstddef>
#include <iostream>
template <class T>
struct extract { typedef T type; };
// error C2989: 'A<T,2>' : template class has already been
// defined as a non-template class
// error C2988: unrecognizable template declaration/definition
template <class T, size_t N>
struct extract<T[N]> { typedef T type; };
template <class T> struct TrackNewHelper
{
static T* TrackNew( T* ptr, const char* file, int line)
{
std::cout << "Tracking object allocation" << std::endl;
return ptr;
}
};
// error C2989: 'A<T,2>' : template class has already been
// defined as a non-template class
// error C2988: unrecognizable template declaration/definition
template <class T, size_t N> struct TrackNewHelper<T[N]>
{
static T* TrackNew( T* ptr, const char* file, int line)
{
std::cout << "Tracking array allocation " << std::endl;
return ptr;
}
};
template <class T> typename extract<T>::type* TrackNew(
typename extract<T>::type* ptr, const char* file, int line )
{
return TrackNewHelper<T>::TrackNew( ptr, file, line );
}
#define NEW( T ) TrackNew<T>( new T, __FILE__, __LINE__ )
int main()
{
int * p = NEW( int );
delete p;
p = NEW( int[64] );
delete [] p;
return 0;
}
The problem is also described here:
http://support.microsoft.com/kb/240866/en-us
--
Matthias Hofmann
Anvil-Soft, CEO
http://www.anvil-soft.com - The Creators of Toilet Tycoon
http://www.anvil-soft.de - Die Macher des Klomanagers