%module global_scope_types // no constructor/destructor wrappers as they do not use global scope operator which we are trying to test here %nodefaultctor Dingaling; %nodefaultdtor Dingaling; %inline %{ struct Dingaling {}; typedef Dingaling DINGALING; template struct MyTemplate { T tt(T t) { return t; } T& ttr(T& t) { return t; } }; #ifndef SWIG // This is added so that the code will not compile, if the global scope operator on Dingaling is omitted in the generated code namespace Spac { class Dingaling { Dingaling(); Dingaling(const Dingaling& t); Dingaling& operator=(const Dingaling t); }; } using namespace Spac; #endif namespace Spac { struct Ting {}; typedef Ting TING; class Test { public: void something(::Dingaling t, ::Dingaling* pt, ::Dingaling& rt, const ::Dingaling& crt) {} void tsomething(MyTemplate< ::Dingaling > t1, MyTemplate< const ::Dingaling* > t2) {} // void usomething(::MyTemplate< ::DINGALING > t3, ::MyTemplate< ::DINGALING *> t4) {} // needs fixing void nothing(::Spac::Ting*, ::Spac::TING&) {} }; } extern "C" void funcptrtest( void (*)(::Dingaling) ) {} %}