@@ -63,15 +63,45 @@ class GenericDocument;
63
63
https://code.google.com/p/rapidjson/issues/detail?id=64
64
64
*/
65
65
template <typename Encoding, typename Allocator>
66
- struct GenericMember {
66
+ class GenericMember {
67
+ public:
67
68
GenericValue<Encoding, Allocator> name; // !< name of member (must be a string)
68
69
GenericValue<Encoding, Allocator> value; // !< value of member.
69
70
71
+ #if RAPIDJSON_HAS_CXX11_RVALUE_REFS
72
+ // ! Move constructor in C++11
73
+ GenericMember (GenericMember&& rhs) RAPIDJSON_NOEXCEPT
74
+ : name(std::move(rhs.name)),
75
+ value(std::move(rhs.value))
76
+ {
77
+ }
78
+
79
+ // ! Move assignment in C++11
80
+ GenericMember& operator =(GenericMember&& rhs) RAPIDJSON_NOEXCEPT {
81
+ return *this = static_cast <GenericMember&>(rhs);
82
+ }
83
+ #endif
84
+
85
+ // ! Assignment with move semantics.
86
+ /* ! \param rhs Source of the assignment. Its name and value will become a null value after assignment.
87
+ */
88
+ GenericMember& operator =(GenericMember& rhs) RAPIDJSON_NOEXCEPT {
89
+ if (RAPIDJSON_LIKELY (this != &rhs)) {
90
+ name = rhs.name ;
91
+ value = rhs.value ;
92
+ }
93
+ return *this ;
94
+ }
95
+
70
96
// swap() for std::sort() and other potential use in STL.
71
97
friend inline void swap (GenericMember& a, GenericMember& b) RAPIDJSON_NOEXCEPT {
72
98
a.name .Swap (b.name );
73
99
a.value .Swap (b.value );
74
100
}
101
+
102
+ private:
103
+ // ! Copy constructor is not permitted.
104
+ GenericMember (const GenericMember& rhs);
75
105
};
76
106
77
107
// /////////////////////////////////////////////////////////////////////////////
0 commit comments