Update: o shared_ptr neste exemplo é como o do Boost, mas não suporta shared_polymorphic_downcast (ou dynamic_pointer_cast ou static_pointer_cast para esse assunto)! Estou tentando inicializar um ponteiro compartilhado para uma classe derivada sem perder a contagem de referência: struct Base {...