%module template_inherit_abstract %warnfilter(801) oss::test; /* Ruby, wrong class name */ %warnfilter(802, 813) oss::Module; /* Ruby & Java, multiple inheritance */ %inline %{ namespace oss { template struct Wrap { }; struct ModuleBase { virtual ~ModuleBase() {} virtual int get() = 0; }; template struct Module : C, ModuleBase { protected: Module() {} }; template struct HModule : Module > { // virtual int get(); // declaration here works protected: HModule() {} }; } struct B { }; %} namespace oss { %template(Wrap_B) Wrap; %template(Module_B) Module >; %template(HModule_B) HModule; } %inline %{ namespace oss { struct test : HModule { virtual int get() {return 0;} // declaration here breaks swig }; } %}