%module xxx namespace test { template T max(T a, T b) { return (a > b) ? a : b; } template class vector { public: vector() { } ~vector() { } }; } namespace test1 { %template(maxchar) ::test::max; %template(vectorchar) ::test::vector; } namespace test2 { using namespace test; %template(maxshort) max; %template(vectorshort) vector; } namespace test3 { using test::max; using test::vector; %template(maxlong) max; %template(vectorlong) vector; } namespace test4 { using namespace test; typedef int Integer; } namespace test4 { %template(maxInteger) max; %template(vectorInteger) vector; } namespace test5 { // Empty namespace } template struct GlobalVector { void gook(T i) {} void geeko(double d) {} void geeky(int d) {} }; %template(GlobalVectorIntPtr) test5::GlobalVector; // should fail as GlobalVector is in global namespace using namespace test; namespace test6 { %template(maxdouble) max; %template(vectordouble) vector; }