Exemplos viáveis de C ++ RTTI [fechado]

Eu estou familiarizado com o C ++ RTTI e acho o conceito interessante.

Ainda existem muito mais maneiras de abusar do que usá-lo corretamente (o medo do interruptor RTTI vem à mente). Como desenvolvedor, encontrei (e usei) apenas dois usos viáveis para ele (mais exatamente, um e meio).

Você poderia compartilhar algumas das maneiras pelas quais o RTTI é uma solução viável para um problema, com exemplo de código / pseudo-código incluído?

Nota: O objetivo é ter um repositório de exemplos viáveis que um desenvolvedor júnior pode consultar, criticar e aprender.

Editar: Você encontrará o código abaixo usando C ++ RTTI

// A has a virtual destructor (i.e. is polymorphic)
// B has a virtual destructor (i.e. is polymorphic)
// B does (or does not ... pick your poison) inherits from A

void doSomething(A * a)
{
   // typeid()::name() returns the "name" of the object (not portable)
   std::cout << "a is [" << typeid(*a).name() << "]"<< std::endl ;

   // the dynamic_cast of a pointer to another will return NULL is
   // the conversion is not possible
   if(B * b = dynamic_cast<B *>(a))
   {
      std::cout << "a is b" << std::endl ;
   }
   else
   {
      std::cout << "a is NOT b" << std::endl ;
   }
}