%module extend_special_variables %rename(ForExtensionNewName) ForExtension; %rename(extended_renamed) ForExtension::extended; %extend ForExtension { ForExtension() { return new ForExtension(); } const char* extended() { return "name:$name symname:$symname wrapname:$wrapname overname:$overname decl:$decl fulldecl:$fulldecl parentclasssymname:$parentclasssymname parentclassname:$parentclassname"; } const char* extended(int) { return "name:$name symname:$symname wrapname:$wrapname overname:$overname decl:$decl fulldecl:$fulldecl parentclasssymname:$parentclasssymname parentclassname:$parentclassname"; } } %inline %{ struct ForExtension { }; %} %inline %{ namespace Space { template class ExtendTemplate {}; } %} %extend Space::ExtendTemplate { void extending() { $parentclassname tmp; (void)tmp; } } %template(ExtendTemplateInt) Space::ExtendTemplate;