%module assign_reference // Copy of cpp11_assign_delete.i testcase with deleted assignment operators replaced by reference member variables %rename(Assign) *::operator=; // (1) Test directly non-assignable member variables %inline %{ int GlobalInt = 0; int& getGlobalIntRef() { return GlobalInt; } struct AssignPublic { AssignPublic() : PublicMember(GlobalInt) {} int &PublicMember; }; struct AssignProtected { AssignProtected() : ProtectedMember(GlobalInt) {} protected: int &ProtectedMember; }; typedef const int& ConstIntRef; // also check typedef resolution struct AssignPrivate { AssignPrivate() : PrivateMember(GlobalInt) {} private: ConstIntRef PrivateMember; }; struct MemberVars { // These will only have getters AssignPublic MemberPublic; AssignProtected MemberProtected; AssignPrivate MemberPrivate; }; // (2) Test indirectly non-assignable member variables via inheritance struct AssignPublicDerived : AssignPublic {}; struct AssignProtectedDerived : AssignProtected {}; struct AssignPrivateDerived : AssignPrivate {}; struct AssignPublicDerivedSettable : AssignPublic { AssignPublicDerivedSettable& operator=(const AssignPublicDerivedSettable &) { return *this; } }; struct AssignProtectedDerivedSettable : AssignProtected { AssignProtectedDerivedSettable& operator=(const AssignProtectedDerivedSettable &) { return *this; } }; struct AssignPrivateDerivedSettable : AssignPrivate { AssignPrivateDerivedSettable& operator=(const AssignPrivateDerivedSettable &) { return *this; } }; struct InheritedMemberVars { // These will only have getters AssignPublicDerived MemberPublicDerived; AssignProtectedDerived MemberProtectedDerived; AssignPrivateDerived MemberPrivateDerived; static AssignPublicDerived StaticMemberPublicDerived; static AssignProtectedDerived StaticMemberProtectedDerived; static AssignPrivateDerived StaticMemberPrivateDerived; // These will have getters and setters AssignPublicDerivedSettable MemberPublicDerivedSettable; AssignProtectedDerivedSettable MemberProtectedDerivedSettable; AssignPrivateDerivedSettable MemberPrivateDerivedSettable; static AssignPublicDerivedSettable StaticMemberPublicDerivedSettable; static AssignProtectedDerivedSettable StaticMemberProtectedDerivedSettable; static AssignPrivateDerivedSettable StaticMemberPrivateDerivedSettable; }; AssignPublicDerived InheritedMemberVars::StaticMemberPublicDerived; AssignProtectedDerived InheritedMemberVars::StaticMemberProtectedDerived; AssignPrivateDerived InheritedMemberVars::StaticMemberPrivateDerived; AssignPublicDerivedSettable InheritedMemberVars::StaticMemberPublicDerivedSettable; AssignProtectedDerivedSettable InheritedMemberVars::StaticMemberProtectedDerivedSettable; AssignPrivateDerivedSettable InheritedMemberVars::StaticMemberPrivateDerivedSettable; // These will only have getters AssignPublicDerived GlobalPublicDerived; AssignProtectedDerived GlobalProtectedDerived; AssignPrivateDerived GlobalPrivateDerived; // These will have getters and setters AssignPublicDerivedSettable GlobalPublicDerivedSettable; AssignProtectedDerivedSettable GlobalProtectedDerivedSettable; AssignPrivateDerivedSettable GlobalPrivateDerivedSettable; %} // (3) Test indirectly non-assignable member variables via classes that themselves have non-assignable member variables %inline %{ struct MemberPublicVar { AssignPublic MemberPublic; }; struct MemberProtectedVar { protected: AssignProtected MemberProtected; }; struct MemberPrivateVar { private: AssignPrivate MemberPrivate; }; struct MembersMemberVars { // These will only have getters MemberPublicVar MemberPublic; MemberProtectedVar MemberProtected; MemberPrivateVar MemberPrivate; }; struct StaticMembersMemberVars { static MemberPublicVar StaticMemberPublic; static MemberProtectedVar StaticMemberProtected; static MemberPrivateVar StaticMemberPrivate; }; MemberPublicVar StaticMembersMemberVars::StaticMemberPublic; MemberProtectedVar StaticMembersMemberVars::StaticMemberProtected; MemberPrivateVar StaticMembersMemberVars::StaticMemberPrivate; MemberPublicVar GlobalMemberPublic; MemberProtectedVar GlobalMemberProtected; MemberPrivateVar GlobalMemberPrivate; // Setters and getters available struct StaticMembersMemberVarsHolder { StaticMembersMemberVars Member; }; StaticMembersMemberVars GlobalStaticMembersMemberVars; %}