Skip to content

Commit 5777291

Browse files
authored
Merge pull request Tencent#1579 from Tencent/vs2010
Fix VS2010 build via disabling copy constructor in GenericMember
2 parents 6006d6b + 88a1ba9 commit 5777291

File tree

2 files changed

+32
-2
lines changed

2 files changed

+32
-2
lines changed

include/rapidjson/document.h

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,15 +63,45 @@ class GenericDocument;
6363
https://code.google.com/p/rapidjson/issues/detail?id=64
6464
*/
6565
template <typename Encoding, typename Allocator>
66-
struct GenericMember {
66+
class GenericMember {
67+
public:
6768
GenericValue<Encoding, Allocator> name; //!< name of member (must be a string)
6869
GenericValue<Encoding, Allocator> value; //!< value of member.
6970

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+
7096
// swap() for std::sort() and other potential use in STL.
7197
friend inline void swap(GenericMember& a, GenericMember& b) RAPIDJSON_NOEXCEPT {
7298
a.name.Swap(b.name);
7399
a.value.Swap(b.value);
74100
}
101+
102+
private:
103+
//! Copy constructor is not permitted.
104+
GenericMember(const GenericMember& rhs);
75105
};
76106

77107
///////////////////////////////////////////////////////////////////////////////

include/rapidjson/fwd.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ class PrettyWriter;
102102
// document.h
103103

104104
template <typename Encoding, typename Allocator>
105-
struct GenericMember;
105+
class GenericMember;
106106

107107
template <bool Const, typename Encoding, typename Allocator>
108108
class GenericMemberIterator;

0 commit comments

Comments
 (0)