%module smart_pointer_template_defaults_overload // SF Bug #1363 // Problem with method overloading when some methods are added by %extend and others are real methods // and using template default parameters with smart pointers. %warnfilter(SWIGWARN_LANG_OVERLOAD_IGNORED) Wrap::operator->; %warnfilter(SWIGWARN_LANG_OVERLOAD_SHADOW) Container::rubout; %include %include %inline %{ template class Wrap { T *ptr; public: Wrap(T *p) : ptr(p) {} T const* operator->(void) const { return ptr; } T* operator->(void) { return ptr; } }; %} %template(StringDoubleMap) std::map; // erase is generated okay %template(WrappedMap) Wrap< std::map >; // erase wrappers lead to compile error // Above only affects some languages depending on how std::map is implemented. // Below is a cutdown language independent demonstration of the bug %extend Container { void rubout(int, int) {} } %inline %{ template class Container { public: int rubout() { return 0; } void rubout(T const &element) {} static Container* factory() { return new Container(); } static Container* factory(bool b) { return new Container(); } static void staticstuff(bool) {} #ifdef SWIG %extend { void rubout(bool) {} } #endif }; %} %extend Container { void rubout(int) {} } %template(ContainerInt) Container; %template(WrapContainerInt) Wrap< Container >;