%module smart_pointer_protected %inline %{ namespace hi { struct A { virtual ~A() { } virtual int value(A*) = 0; int index; }; struct B : A { protected: int value(A*) { return 1; } }; struct C { hi::B* operator->() const { return new hi::B(); } private: int index; }; } %}