%module template_tbase_template %warnfilter(SWIGWARN_RUBY_WRONG_NAME) traits; /* Ruby, wrong class name */ %warnfilter(SWIGWARN_PARSE_EXPLICIT_TEMPLATE); %inline %{ typedef double Double; template struct Function { char *test() { return (char *) "test"; } }; template struct traits { typedef ArgType arg_type; typedef ResType res_type; typedef Function base; }; // Egad! template struct Class : Function::arg_type, typename traits::res_type> { }; template typename traits::base make_Class() { return Class(); } %} %{ template struct Function ; template struct Class ; %} %template(traits_dd) traits ; %template(Function_dd) Function ; %template(Class_dd) Class ; %template(make_Class_dd) make_Class;