Whoops, i made a typo template class __declspec(dllexport) CXList; should be, template class __declspec(dllexport) CXList<int>; dNimrod#X wrote: Can you provide me with an explanation as to why you have to do it like so? Because a template is just that - a template that the compiler can use to create code at compile time when you specialize the template. When you define the template class template<class TT> MyClassT { ... }; The TT is a variable/placeholder. What do you expect the compiler to do with TT unless you specify what it is ? But, when you say MyClass<int> the compiler goes 'ahhh, now i can replace all cases of TT with int and compile'. As for exporting, given the above you can't export a template class like you would a normal class. So the syntax i provided was the solution 'they' decided on. It tells the compiler that, even if CXList<int> isn't used anywhere, you want it to create all methods and export them. If you didn't do this the compiler would optimize away the code. The same syntax can be used to export function template instances, or specific class template method instances (ie you don't want to export all methods from a class template). ...cmk Save the whales - collect the whole set