That's the case only if `Statement` is inherited directly. A possibility to avoid this is to plop this:

   assert(typeid(*this) == typeid(Whatever));