%module xxx %feature("smartptr", noblock=1) AA { std::shared_ptr< AA > } %feature("smartptr", noblock=1) DD { std::shared_ptr< } struct AA {}; struct BB : AA {}; struct CC : AA {}; struct DD : AA {}; %ignore EE; struct EE : AA {}; // should not warn for AA base as EE is ignored struct EEE : EE {}; // should warn for AA base, but not for EE base %feature("smartptr", noblock=1) YY { std::shared_ptr< YY > } struct XX {}; struct YY : XX {}; %feature("smartptr", noblock=1) ZZ { std::shared_ptr< YY > } %ignore ZZ; struct ZZ : XX {}; // Next two are NOT smartptr and so should not issue warning struct ZZZ : ZZ {}; struct ZZZZ : ZZZ {};