Here's overview information on export. More export information can be found at http://www.comeaucomputing.com/4.0/docs/userman/export.html A template must be declared export at both the point of definition and the point of reference. The easiest way to do this is to put export on the declaration in the header file. The definition does not need to have export on it because the prior declaration in the header specified export. For members of class templates the export keyword is intended to be applied to the entire class as in export template struct A { ... }; Member templates may be declared export, but nontemplate members of class templates cannot: template struct A { export template void f(); // allowed export void g(); // not allowed } When using export, source files that define exported templates are compiled as translation units. This is an example of how export source files differ from included files. // x.h export template struct X { void f(); }; // x.c #include #include "x.h" void g(){ printf("Hello\n"); } template void X::f(){ g(); } // test.c #include "x.h" int main() { X xi; xi.f(); } This program is compiled and linked with the commands como -c test.c como -c x.c como test.obj x.obj (NOTE: depending upon your configuration, you may have to explicitly specify one of more of the following command line options, say, under MS-Windows you may need to specify: --vc7, --A or --long_long. For more details on Comeau C++ for MS-Windows, see: http://www.comeaucomputing.com/4.3.0/minor/win95+/como433.html ) Because x.c is compiled separately it must include stdio.h to declare the printf function. // the end