Yet another form of polymorphism is the use of generics or templates. Here a type can be used as a parameter is a class description.
template <class T> class link { public: T value; link<T> * nextLink; };
The declaration provides the actual type:
link<int> intLink; // link with integer value