%module template_using_directive_typedef %inline %{ namespace space { template class Vector {}; class VectorClass {}; } struct Obj {}; %} %template(Vector_Obj) space::Vector; %inline %{ namespace tns { using space::Vector; // template using directives were not being added into the typedef table using space::VectorClass; typedef Vector NSVec; } %} %inline %{ namespace tns { struct Holder { // using Vec = Vector; typedef Vector Vec; typedef VectorClass VecClass; Vec items; void holder_use1(space::Vector, tns::NSVec, tns::Vector) {} void holder_use2(space::Vector, NSVec, Vector) {} void holder_use3(tns::Holder::Vec, Holder::Vec, Vec) {} }; void tns_holder_use(tns::Holder::Vec, Holder::Vec) {} void tns_use(space::Vector, NSVec, tns::NSVec) {} } void global_holder_use(tns::Holder::Vec) {} void global_use(space::Vector, tns::NSVec, tns::Vector) {} namespace ns1 { void ns1_holder_use(tns::Holder::Vec) {} } namespace ns2 { using namespace tns; void ns2_holder_use(tns::Holder::Vec, Holder::Vec, NSVec, Vector) {} } %}