diff --git a/include/rapidjson/document.h b/include/rapidjson/document.h index f5c02d647..869667a88 100644 --- a/include/rapidjson/document.h +++ b/include/rapidjson/document.h @@ -2168,8 +2168,7 @@ class GenericDocument : public GenericValue { } #endif - // Allow assignment from ValueType. - // Refer to Effective C++ 3rd Edition/Item 33: Avoid hiding inherited names. + // Allow assignment like a ValueType. using ValueType::operator=; //! Exchange the contents of this document with those of another. @@ -2188,7 +2187,6 @@ class GenericDocument : public GenericValue { } // Allow Swap from ValueType. - // Refer to Effective C++ 3rd Edition/Item 33: Avoid hiding inherited names. using ValueType::Swap; //! free-standing swap function helper diff --git a/test/unittest/documenttest.cpp b/test/unittest/documenttest.cpp index 9ff8096fa..0d08b2588 100644 --- a/test/unittest/documenttest.cpp +++ b/test/unittest/documenttest.cpp @@ -661,17 +661,25 @@ TYPED_TEST(DocumentMove, MoveAssignmentStack) { // Issue 22: Memory corruption via operator= from Document // Fixed by making unimplemented assignment operator private. -// Prohibit assignment from Document, But allow assignment from Value +// Prohibit assignment from Document. +// But allow assignment from ValueType/int/double/..., like a ValueType TEST(Document, Assignment) { // Document d1; // Document d2; // d1 = d2; - Value x(1234); Document d; + + Value x(1234); d = x; EXPECT_TRUE(x.IsNull()); // move semantic EXPECT_EQ(1234, d.GetInt()); + + d = 1; + EXPECT_EQ(1, d.GetInt()); + + d = 12.34; + EXPECT_NEAR(12.34, d.GetDouble(), 0.0); } #ifdef __clang__