%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 <std_string.i> %include <std_map.i> %inline %{ template <typename T> 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<std::string, double>; // erase is generated okay %template(WrappedMap) Wrap< std::map<std::string, double> >; // 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<typename T, typename X = T> 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<double>; %template(WrapContainerInt) Wrap< Container<double> >;
Generated by dwww version 1.15 on Tue Jul 2 00:12:06 CEST 2024.