too bad we have no templating requiring a base class in c++...