%module template_default_cache; %inline %{ namespace d { template< typename T > class d {}; } %} %ignore ns_a::iface1::Model; %inline %{ namespace ns_a { namespace iface1 { class Model {}; typedef d::d ModelPtr; } using iface1::ModelPtr; } %} %inline %{ namespace ns_b { namespace iface1 { class Model { public: ns_a::ModelPtr foo() { return ns_a::ModelPtr(); }; }; typedef d::d ModelPtr; ns_a::ModelPtr get_mp_a() { return ns_a::ModelPtr(); } ModelPtr get_mp_b() { return ModelPtr(); } } } %} %template(AModelPtr) d::d; %template(BModelPtr) d::d;