A polymorphic linked list for C++