#include <stdio.h>

template<class T> class Base {
 public:
     Base() { };
     virtual ~Base() { };
     virtual void A() {
         printf("I'm Base::A\n");
     }
     void B() {
       printf("I'm Base::B\n");
     }
     virtual Base<T> *toBase() {
       return static_cast<Base<T> *>(this);
     }
};
 
        
