| %module cpp11_assign_rvalue_reference |
| |
| // Copy of assign_reference.i testcase replacing reference member variables with rvalue reference member variables |
| |
| %rename(Assign) *::operator=; |
| |
| // (1) Test directly non-assignable member variables |
| %inline %{ |
| int GlobalInt = 0; |
| int&& getAnIntRValueRef() { return std::move(*new int()); } |
| struct AssignPublic { |
| AssignPublic() : PublicMember(std::move(*new int())) {} |
| int &&PublicMember; |
| }; |
| |
| struct AssignProtected { |
| AssignProtected() : ProtectedMember(std::move(*new int())) {} |
| protected: |
| int &&ProtectedMember; |
| }; |
| |
| typedef const int&& ConstIntRValueRef; // also check typedef resolution |
| struct AssignPrivate { |
| AssignPrivate() : PrivateMember(std::move(*new int())) {} |
| private: |
| ConstIntRValueRef 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; |
| %} |