%module typemap_template_typedef //%module("templatereduce") typemap_template_typedef %typemap(in) int TMAP55 %{ $1 = 55; /* int TMAP55 typemap */ %} %typemap(in) int TMAP66 %{ $1 = 66; /* int TMAP66 typemap */ %} %typemap(in) int TMAP77 %{ $1 = 77; /* int TMAP77 typemap */ %} %typemap(in) int TMAP88 %{ $1 = 88; /* int TMAP88 typemap */ %} %apply int TMAP77 { XXX::Long cc } %inline %{ typedef int MyInteger; template struct XXX { #ifdef SWIG // In swig-3.0.12 'Long aa' was actually stored as 'long aa' in typemap table instead of 'XXX::Long aa' %apply int TMAP55 { Long aa } %apply int TMAP66 { XXX::Long bb } %apply int TMAP88 { XXX::Long dd } #endif typedef long Long; long aa1(long aa) { return aa; } long aa2(Long aa) { return aa; } long bb1(long bb) { return bb; } long bb2(Long bb) { return bb; } long cc1(long cc) { return cc; } long cc2(Long cc) { return cc; } long dd1(long dd) { return dd; } long dd2(Long dd) { return dd; } #ifdef SWIG %clear Long aa; %clear XXX::Long bb; %clear XXX::Long dd; #endif long aa3(Long aa) { return aa; } long bb3(Long bb) { return bb; } long cc3(Long cc) { return cc; } long dd3(Long dd) { return dd; } }; %} %template(XXXInt) XXX; %clear XXX::Long cc; %inline %{ long aa1(XXX::Long aa) { return aa; } long aa2(long aa) { return aa; } long bb1(XXX::Long bb) { return bb; } long bb2(long bb) { return bb; } long cc1(XXX::Long cc) { return cc; } long cc2(long cc) { return cc; } long dd1(XXX::Long dd) { return dd; } long dd2(long dd) { return dd; } %} %inline %{ typedef MyInteger MY_INTEGER; template struct YYY { void meff(T1 t1, T2 t2) {} }; %} %template(YYYIntInt) YYY; %inline %{ void whyohwhy(YYY yy) {} %}