#include #include struct S{}; template class Base { public: Base() { //Init(); // Needs to call child } void Test() { Init(); } virtual void Init() = 0; }; class Child : public virtual Base { public: virtual void Init() { printf("test\n"); } }; // Test pure-virtual method (make sure it's forcing) class Child2 : public virtual Base { public: }; int main() { Child foo; // Should print "test" Child2 foo2; // Does not compile - cannot initialize abstract class ((Base*)&foo)->Init(); foo.Test(); system("pause"); return 0; }