mirror of https://github.com/swig/swig
57 lines
1.5 KiB
OpenEdge ABL
57 lines
1.5 KiB
OpenEdge ABL
%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> >;
|
|
|