%module overload_polymorphic %inline %{ class Base { public: Base(){} virtual ~Base(){} }; class Derived : public Base { public: Derived(){} virtual ~Derived(){} }; int test(Base* base){ return 0;} int test(int hello){ return 1; } class Unknown; int test2(Unknown* unknown) { return 0; } int test2(Base* base) { return 1; } int test3(const char*, const Base* = 0, bool = false) { return 0; } int test3(Base&, const char* = 0, const Base* = 0, bool = false) { return 1; } %}