%module abstract_inherit %warnfilter(SWIGWARN_TYPE_ABSTRACT) Spam; %warnfilter(SWIGWARN_TYPE_ABSTRACT) Bar; %inline %{ class Foo { public: virtual ~Foo() { } virtual int blah() = 0; }; class Bar : public Foo { }; class Spam: public Foo { public: Spam() { } }; template class NRFilter { public: virtual ~NRFilter() { } protected: virtual void do_filter() = 0; }; template class NRRCFilter : public NRFilter { }; template class NRRCFilterpro : protected NRFilter { }; template class NRRCFilterpri : private NRFilter { }; %} %template(NRFilter_i) NRFilter; %template(NRRCFilter_i) NRRCFilter; %template(NRRCFilterpro_i) NRRCFilterpro; %template(NRRCFilterpri_i) NRRCFilterpri;