blob: 82614de3af379f8fdd8f4dd69ccce8eb90127586 [file] [log] [blame]
%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;
%}