,请教一个effective c++上的newHandlerSupport的编译有关问题

各位高手,请问一个effective c++上的newHandlerSupport的编译问题
这本书的条款7-8上面说了有关内存管理的问题,我编译了一下,编译不过啊?敢问给为高手怎么回事
newHandlerSupport.h
C/C++ code

#ifndef NEW_HANDLER_SUPPORT_H
#define NEW_HANDLER_SUPPORT_H
#include <new>
using namespace std;
template<class T>
class newHandlerSupport
{
    public:
        static new_handler set_new_handler(new_handler p);
        static void* operator new(size_t size);
    private:
        static new_handler currentHandler;
};
#endif



newHandlerSupport.cpp
C/C++ code

#include "newHandlerSupport.h"
template<class T>
new_handler newHandlerSupport<T>::set_new_handler(new_handler p)
{
    new_handler oldHandler = currentHandler;
    currentHandler =p;
    return oldHandler;
}
template<class T>
void * newHandlerSupport<T>::operator new(size_t size)
{
    new_handler globalHandler =
        std::set_new_handler(currentHandler);
    void * memory;
    try
    {
        memory = ::operator new(size);
    }
    catch (std::bad_alloc&)
    {
        std::set_new_handler(globalHandler);
        throw;
    }
    std::set_new_handler(globalHandler);
    return memory;
}
template<class T>
new_handler newHandlerSupport<T>::currentHandler;



testNewHandler.cpp
C/C++ code

#include <iostream>
#include "newHandlerSupport.h"
using namespace std;
void noMoreMemory( void )
{
    cout << "err";
}
class test:public newHandlerSupport<test>
{
      int aaaa[1000000000];
      public:
         test(){};
         ~test(){}
};
int main()
{
    //newHandlerSupport<test>::set_new_handler(noMoreMemory);//就是这2行调用啊
    //test<int> * x = new test<int>;//我用test *x = new test;也会报错,到底是什么问题呢?

    return 0;
}



再次感谢各位高手!!

------解决方案--------------------
因为你用了分离编译。google刘未鹏“为什么C++编译器不支持模板的分离编译”