Templated smart pointers overloaded with both const and non const operator-> generated uncompilable code when the pointee was a class with either public member variables or static methods.

git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@12512 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
William S Fulton 2011-03-02 22:30:05 +00:00
commit 28af783d18
4 changed files with 51 additions and 4 deletions

View file

@ -313,6 +313,7 @@ CPP_TEST_CASES += \
smart_pointer_rename \
smart_pointer_simple \
smart_pointer_static \
smart_pointer_template_const_overload \
smart_pointer_templatemethods \
smart_pointer_templatevariables \
smart_pointer_typedef \

View file

@ -0,0 +1,35 @@
%module smart_pointer_template_const_overload
%warnfilter(SWIGWARN_LANG_OVERLOAD_IGNORED) SmartPointer<FooImplementation>::operator->; // Overloaded method SmartPointer< FooImplementation >::operator ->() ignored
%inline %{
template <class T> class SmartPointer {
T *ptr;
public:
SmartPointer(T *t = 0) : ptr(t) {}
inline const T * operator->() const { return ptr; }
inline T * operator->() { return ptr; }
};
class FooImplementation {
public:
int mingy() {}
int constmingy() const {}
static int thingy() {}
static int svariable;
static const int constsvariable = 2;
int normalvariable;
};
void tester() {
SmartPointer<FooImplementation> p;
p->mingy();
p->constmingy();
p->thingy();
int a = p->svariable;
a = p->constsvariable;
a = p->normalvariable;
}
%}
%template(FooSmartPointer) SmartPointer<FooImplementation>;