As I said in another email, this is fine so long as the specialization is for a primitive type. For user-defined types it gets much more complicated, and leads to circular dependencies. On Fri, 10 Jul 2009 09:25 -0400, "John Fine" <johnsfine@xxxxxxxxxxx> wrote: > No. The header file did not declare the specialization, so the > specialization was called without being declared. > > I think you only need to declare it, not define it, in the compilation > where it is called (though one of the posts in that link said > otherwise). Change the header file to > > // Binky.h > #ifndef BINKY_H > #define BINKY_H > template<typename T> const char* getString() > { > return "T"; > } > template<> const char* getstring<int>(); > #endif