%module using_member_scopes // Fully qualifying parameter types in a method declared after the using declaration caused // a method being incorrectly added by the using declaration even though the declaration already existed %inline %{ namespace OgreBites { struct NativeWindowType {}; class ApplicationContextBase { public: virtual ~ApplicationContextBase() {} virtual void setWindowGrab(NativeWindowType* win, bool grab = true) {} void setWindowGrab(bool grab = true) {} }; class ApplicationContextSDL : public ApplicationContextBase { public: using ApplicationContextBase::setWindowGrab; void setWindowGrab(NativeWindowType* win, bool grab = true) {} // This should not be added again as it exists in base class }; /* typedef not working yet class ApplicationContextSDL2 : public ApplicationContextBase { public: using ApplicationContextBase::setWindowGrab; typedef NativeWindowType* pNWT; void setWindowGrab(pNWT win, bool grab) {} // This should not be added again as it exists in base class }; */ } %} %inline %{ // Test using declaration in various positions before and after overloaded methods // Testing where the derived class overrides all the base class methods (and more) namespace Bites { struct Base { virtual ~Base() {} virtual void grab() {} virtual void grab(int i) {} }; struct Derived1 : public Base { using Base::grab; virtual void grab() {} virtual void grab(int i) {} }; struct Derived2 : public Base { using Base::grab; virtual void grab() {} virtual void grab(int i) {} virtual void grab(int i, double d) {} }; struct Derived3 : public Base { virtual void grab() {} using Base::grab; virtual void grab(int i) {} }; struct Derived4 : public Base { virtual void grab() {} using Base::grab; virtual void grab(int i) {} virtual void grab(int i, double d) {} }; struct Derived5 : public Base { virtual void grab() {} virtual void grab(int i) {} using Base::grab; }; struct Derived6 : public Base { virtual void grab() {} virtual void grab(int i) {} virtual void grab(int i, double d) {} using Base::grab; }; } %}