Go forward to redundant templates.
Go backward to templates.
Go up to User Problems.

I get undefined symbols when using templates
============================================

   (Thanks to Jason Merrill for this section).

   g++ does not automatically instantiate templates defined in other
files.  Because of this, code written for cfront will often produce
undefined symbol errors when compiled with g++.  You need to tell g++
which template instances you want, by explicitly instantiating them in
the file where they are defined.  For instance, given the files

   `templates.h':
     template <class T>
     class A {
     public:
       void f ();
       T t;
     };
     
     template <class T> void g (T a);

   `templates.cc':
     #include "templates.h"
     
     template <class T>
     void A<T>::f () { }
     
     template <class T>
     void g (T a) { }

   main.cc:
     #include "templates.h"
     
     main ()
     {
       A<int> a;
       a.f ();
       g (a);
     }

   compiling everything with `g++ main.cc templates.cc' will result in
undefined symbol errors for `A<int>::f ()' and `g (A<int>)'.  To fix
these errors, add the lines

     template class A<int>;
     template void g (A<int>);

   to the bottom of `templates.cc' and recompile.