Commit 795946b1 authored by Milo Yip's avatar Milo Yip

Merge pull request #595 from miloyip/vcwarning

Fix VC warnings
parents 62a9a6b0 12425693
...@@ -54,6 +54,7 @@ elseif (CMAKE_CXX_COMPILER_ID MATCHES "Clang") ...@@ -54,6 +54,7 @@ elseif (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
endif() endif()
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
add_definitions(-D_CRT_SECURE_NO_WARNINGS=1) add_definitions(-D_CRT_SECURE_NO_WARNINGS=1)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHsc")
endif() endif()
#add extra search paths for libraries and includes #add extra search paths for libraries and includes
......
...@@ -30,7 +30,7 @@ environment: ...@@ -30,7 +30,7 @@ environment:
before_build: before_build:
- git submodule update --init --recursive - git submodule update --init --recursive
- cmake -H. -BBuild/VS -G "Visual Studio %VS_VERSION%" -DCMAKE_GENERATOR_PLATFORM=%VS_PLATFORM% -DBUILD_SHARED_LIBS=true -Wno-dev - cmake -H. -BBuild/VS -G "Visual Studio %VS_VERSION%" -DCMAKE_GENERATOR_PLATFORM=%VS_PLATFORM% -DCMAKE_VERBOSE_MAKEFILE=ON -DBUILD_SHARED_LIBS=true -Wno-dev
build: build:
project: Build\VS\RapidJSON.sln project: Build\VS\RapidJSON.sln
......
...@@ -23,8 +23,6 @@ if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") ...@@ -23,8 +23,6 @@ if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread -Werror -Wall -Wextra -Weffc++ -Wswitch-default") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread -Werror -Wall -Wextra -Weffc++ -Wswitch-default")
elseif (CMAKE_CXX_COMPILER_ID MATCHES "Clang") elseif (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror -Wall -Wextra -Weffc++ -Wswitch-default -Wfloat-equal -Wimplicit-fallthrough -Weverything") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror -Wall -Wextra -Weffc++ -Wswitch-default -Wfloat-equal -Wimplicit-fallthrough -Weverything")
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
add_definitions(-D_CRT_SECURE_NO_WARNINGS=1)
endif() endif()
foreach (example ${EXAMPLES}) foreach (example ${EXAMPLES})
......
...@@ -27,6 +27,7 @@ ...@@ -27,6 +27,7 @@
#ifdef _MSC_VER #ifdef _MSC_VER
RAPIDJSON_DIAG_PUSH RAPIDJSON_DIAG_PUSH
RAPIDJSON_DIAG_OFF(4127) // conditional expression is constant RAPIDJSON_DIAG_OFF(4127) // conditional expression is constant
RAPIDJSON_DIAG_OFF(4244) // conversion from kXxxFlags to 'uint16_t', possible loss of data
#endif #endif
#ifdef __clang__ #ifdef __clang__
...@@ -311,6 +312,10 @@ struct GenericStringRef { ...@@ -311,6 +312,10 @@ struct GenericStringRef {
GenericStringRef(const CharType* str, SizeType len) GenericStringRef(const CharType* str, SizeType len)
: s(str), length(len) { RAPIDJSON_ASSERT(s != 0); } : s(str), length(len) { RAPIDJSON_ASSERT(s != 0); }
GenericStringRef(const GenericStringRef& rhs) : s(rhs.s), length(rhs.length) {}
GenericStringRef& operator=(const GenericStringRef& rhs) { s = rhs.s; length = rhs.length; }
//! implicit conversion to plain CharType pointer //! implicit conversion to plain CharType pointer
operator const Ch *() const { return s; } operator const Ch *() const { return s; }
......
...@@ -85,6 +85,10 @@ public: ...@@ -85,6 +85,10 @@ public:
size_t PutEnd(Ch*) { return 0; } size_t PutEnd(Ch*) { return 0; }
MemoryStream& is_; MemoryStream& is_;
private:
EncodedInputStream(const EncodedInputStream&);
EncodedInputStream& operator=(const EncodedInputStream&);
}; };
//! Output byte stream wrapper with statically bound encoding. //! Output byte stream wrapper with statically bound encoding.
......
...@@ -31,6 +31,11 @@ RAPIDJSON_DIAG_PUSH ...@@ -31,6 +31,11 @@ RAPIDJSON_DIAG_PUSH
RAPIDJSON_DIAG_OFF(effc++) RAPIDJSON_DIAG_OFF(effc++)
#endif #endif
#ifdef _MSC_VER
RAPIDJSON_DIAG_PUSH
RAPIDJSON_DIAG_OFF(4512) // assignment operator could not be generated
#endif
#ifndef RAPIDJSON_REGEX_VERBOSE #ifndef RAPIDJSON_REGEX_VERBOSE
#define RAPIDJSON_REGEX_VERBOSE 0 #define RAPIDJSON_REGEX_VERBOSE 0
#endif #endif
...@@ -693,4 +698,8 @@ RAPIDJSON_NAMESPACE_END ...@@ -693,4 +698,8 @@ RAPIDJSON_NAMESPACE_END
RAPIDJSON_DIAG_POP RAPIDJSON_DIAG_POP
#endif #endif
#ifdef _MSC_VER
RAPIDJSON_DIAG_POP
#endif
#endif // RAPIDJSON_INTERNAL_REGEX_H_ #endif // RAPIDJSON_INTERNAL_REGEX_H_
...@@ -23,6 +23,11 @@ RAPIDJSON_DIAG_PUSH ...@@ -23,6 +23,11 @@ RAPIDJSON_DIAG_PUSH
RAPIDJSON_DIAG_OFF(switch-enum) RAPIDJSON_DIAG_OFF(switch-enum)
#endif #endif
#ifdef _MSC_VER
RAPIDJSON_DIAG_PUSH
RAPIDJSON_DIAG_OFF(4512) // assignment operator could not be generated
#endif
RAPIDJSON_NAMESPACE_BEGIN RAPIDJSON_NAMESPACE_BEGIN
static const SizeType kPointerInvalidIndex = ~SizeType(0); //!< Represents an invalid index in GenericPointer::Token static const SizeType kPointerInvalidIndex = ~SizeType(0); //!< Represents an invalid index in GenericPointer::Token
...@@ -1342,4 +1347,8 @@ RAPIDJSON_NAMESPACE_END ...@@ -1342,4 +1347,8 @@ RAPIDJSON_NAMESPACE_END
RAPIDJSON_DIAG_POP RAPIDJSON_DIAG_POP
#endif #endif
#ifdef _MSC_VER
RAPIDJSON_DIAG_POP
#endif
#endif // RAPIDJSON_POINTER_H_ #endif // RAPIDJSON_POINTER_H_
...@@ -68,6 +68,11 @@ RAPIDJSON_DIAG_PUSH ...@@ -68,6 +68,11 @@ RAPIDJSON_DIAG_PUSH
RAPIDJSON_DIAG_OFF(variadic-macros) RAPIDJSON_DIAG_OFF(variadic-macros)
#endif #endif
#ifdef _MSC_VER
RAPIDJSON_DIAG_PUSH
RAPIDJSON_DIAG_OFF(4512) // assignment operator could not be generated
#endif
RAPIDJSON_NAMESPACE_BEGIN RAPIDJSON_NAMESPACE_BEGIN
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
...@@ -1963,7 +1968,8 @@ public: ...@@ -1963,7 +1968,8 @@ public:
GenericSchemaValidator<SchemaDocumentType, Handler> validator(sd_, handler); GenericSchemaValidator<SchemaDocumentType, Handler> validator(sd_, handler);
parseResult_ = reader.template Parse<parseFlags>(is_, validator); parseResult_ = reader.template Parse<parseFlags>(is_, validator);
if ((isValid_ = validator.IsValid())) { isValid_ = validator.IsValid();
if (isValid_) {
invalidSchemaPointer_ = PointerType(); invalidSchemaPointer_ = PointerType();
invalidSchemaKeyword_ = 0; invalidSchemaKeyword_ = 0;
invalidDocumentPointer_ = PointerType(); invalidDocumentPointer_ = PointerType();
...@@ -2004,4 +2010,8 @@ RAPIDJSON_DIAG_POP ...@@ -2004,4 +2010,8 @@ RAPIDJSON_DIAG_POP
RAPIDJSON_DIAG_POP RAPIDJSON_DIAG_POP
#endif #endif
#ifdef _MSC_VER
RAPIDJSON_DIAG_POP
#endif
#endif // RAPIDJSON_SCHEMA_H_ #endif // RAPIDJSON_SCHEMA_H_
...@@ -38,13 +38,25 @@ if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") ...@@ -38,13 +38,25 @@ if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror -Wall -Wextra -Weffc++ -Wswitch-default -Wfloat-equal") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror -Wall -Wextra -Weffc++ -Wswitch-default -Wfloat-equal")
elseif (CMAKE_CXX_COMPILER_ID MATCHES "Clang") elseif (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror -Wall -Wextra -Weffc++ -Wswitch-default -Wfloat-equal -Wimplicit-fallthrough -Weverything") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror -Wall -Wextra -Weffc++ -Wswitch-default -Wfloat-equal -Wimplicit-fallthrough -Weverything")
# If the user is running a newer version of Clang that includes the # If the user is running a newer version of Clang that includes the
# -Wdouble-promotion, we will ignore that warning. # -Wdouble-promotion, we will ignore that warning.
if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 3.7) if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 3.7)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-double-promotion") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-double-promotion")
endif() endif()
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
add_definitions(-D_CRT_SECURE_NO_WARNINGS=1) # Force to always compile with /W4
if(CMAKE_CXX_FLAGS MATCHES "/W[0-4]")
string(REGEX REPLACE "/W[0-4]" "/W4" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
else()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4")
endif()
# Force to always compile with /WX
if(CMAKE_CXX_FLAGS MATCHES "/WX-")
string(REGEX REPLACE "/WX-" "/WX" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
else()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /WX")
endif()
endif() endif()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DRAPIDJSON_HAS_STDSTRING=1") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DRAPIDJSON_HAS_STDSTRING=1")
......
...@@ -447,10 +447,10 @@ TYPED_TEST_CASE(DocumentMove, MoveAllocatorTypes); ...@@ -447,10 +447,10 @@ TYPED_TEST_CASE(DocumentMove, MoveAllocatorTypes);
TYPED_TEST(DocumentMove, MoveConstructor) { TYPED_TEST(DocumentMove, MoveConstructor) {
typedef TypeParam Allocator; typedef TypeParam Allocator;
typedef GenericDocument<UTF8<>, Allocator> Document; typedef GenericDocument<UTF8<>, Allocator> D;
Allocator allocator; Allocator allocator;
Document a(&allocator); D a(&allocator);
a.Parse("[\"one\", \"two\", \"three\"]"); a.Parse("[\"one\", \"two\", \"three\"]");
EXPECT_FALSE(a.HasParseError()); EXPECT_FALSE(a.HasParseError());
EXPECT_TRUE(a.IsArray()); EXPECT_TRUE(a.IsArray());
...@@ -458,7 +458,7 @@ TYPED_TEST(DocumentMove, MoveConstructor) { ...@@ -458,7 +458,7 @@ TYPED_TEST(DocumentMove, MoveConstructor) {
EXPECT_EQ(&a.GetAllocator(), &allocator); EXPECT_EQ(&a.GetAllocator(), &allocator);
// Document b(a); // does not compile (!is_copy_constructible) // Document b(a); // does not compile (!is_copy_constructible)
Document b(std::move(a)); D b(std::move(a));
EXPECT_TRUE(a.IsNull()); EXPECT_TRUE(a.IsNull());
EXPECT_TRUE(b.IsArray()); EXPECT_TRUE(b.IsArray());
EXPECT_EQ(3u, b.Size()); EXPECT_EQ(3u, b.Size());
...@@ -471,7 +471,7 @@ TYPED_TEST(DocumentMove, MoveConstructor) { ...@@ -471,7 +471,7 @@ TYPED_TEST(DocumentMove, MoveConstructor) {
EXPECT_EQ(2u, b.MemberCount()); EXPECT_EQ(2u, b.MemberCount());
// Document c = a; // does not compile (!is_copy_constructible) // Document c = a; // does not compile (!is_copy_constructible)
Document c = std::move(b); D c = std::move(b);
EXPECT_TRUE(b.IsNull()); EXPECT_TRUE(b.IsNull());
EXPECT_TRUE(c.IsObject()); EXPECT_TRUE(c.IsObject());
EXPECT_EQ(2u, c.MemberCount()); EXPECT_EQ(2u, c.MemberCount());
...@@ -481,17 +481,17 @@ TYPED_TEST(DocumentMove, MoveConstructor) { ...@@ -481,17 +481,17 @@ TYPED_TEST(DocumentMove, MoveConstructor) {
TYPED_TEST(DocumentMove, MoveConstructorParseError) { TYPED_TEST(DocumentMove, MoveConstructorParseError) {
typedef TypeParam Allocator; typedef TypeParam Allocator;
typedef GenericDocument<UTF8<>, Allocator> Document; typedef GenericDocument<UTF8<>, Allocator> D;
ParseResult noError; ParseResult noError;
Document a; D a;
a.Parse("{ 4 = 4]"); a.Parse("{ 4 = 4]");
ParseResult error(a.GetParseError(), a.GetErrorOffset()); ParseResult error(a.GetParseError(), a.GetErrorOffset());
EXPECT_TRUE(a.HasParseError()); EXPECT_TRUE(a.HasParseError());
EXPECT_NE(error.Code(), noError.Code()); EXPECT_NE(error.Code(), noError.Code());
EXPECT_NE(error.Offset(), noError.Offset()); EXPECT_NE(error.Offset(), noError.Offset());
Document b(std::move(a)); D b(std::move(a));
EXPECT_FALSE(a.HasParseError()); EXPECT_FALSE(a.HasParseError());
EXPECT_TRUE(b.HasParseError()); EXPECT_TRUE(b.HasParseError());
EXPECT_EQ(a.GetParseError(), noError.Code()); EXPECT_EQ(a.GetParseError(), noError.Code());
...@@ -499,7 +499,7 @@ TYPED_TEST(DocumentMove, MoveConstructorParseError) { ...@@ -499,7 +499,7 @@ TYPED_TEST(DocumentMove, MoveConstructorParseError) {
EXPECT_EQ(a.GetErrorOffset(), noError.Offset()); EXPECT_EQ(a.GetErrorOffset(), noError.Offset());
EXPECT_EQ(b.GetErrorOffset(), error.Offset()); EXPECT_EQ(b.GetErrorOffset(), error.Offset());
Document c(std::move(b)); D c(std::move(b));
EXPECT_FALSE(b.HasParseError()); EXPECT_FALSE(b.HasParseError());
EXPECT_TRUE(c.HasParseError()); EXPECT_TRUE(c.HasParseError());
EXPECT_EQ(b.GetParseError(), noError.Code()); EXPECT_EQ(b.GetParseError(), noError.Code());
...@@ -540,10 +540,10 @@ TYPED_TEST(DocumentMove, MoveConstructorStack) { ...@@ -540,10 +540,10 @@ TYPED_TEST(DocumentMove, MoveConstructorStack) {
TYPED_TEST(DocumentMove, MoveAssignment) { TYPED_TEST(DocumentMove, MoveAssignment) {
typedef TypeParam Allocator; typedef TypeParam Allocator;
typedef GenericDocument<UTF8<>, Allocator> Document; typedef GenericDocument<UTF8<>, Allocator> D;
Allocator allocator; Allocator allocator;
Document a(&allocator); D a(&allocator);
a.Parse("[\"one\", \"two\", \"three\"]"); a.Parse("[\"one\", \"two\", \"three\"]");
EXPECT_FALSE(a.HasParseError()); EXPECT_FALSE(a.HasParseError());
EXPECT_TRUE(a.IsArray()); EXPECT_TRUE(a.IsArray());
...@@ -551,7 +551,7 @@ TYPED_TEST(DocumentMove, MoveAssignment) { ...@@ -551,7 +551,7 @@ TYPED_TEST(DocumentMove, MoveAssignment) {
EXPECT_EQ(&a.GetAllocator(), &allocator); EXPECT_EQ(&a.GetAllocator(), &allocator);
// Document b; b = a; // does not compile (!is_copy_assignable) // Document b; b = a; // does not compile (!is_copy_assignable)
Document b; D b;
b = std::move(a); b = std::move(a);
EXPECT_TRUE(a.IsNull()); EXPECT_TRUE(a.IsNull());
EXPECT_TRUE(b.IsArray()); EXPECT_TRUE(b.IsArray());
...@@ -565,7 +565,7 @@ TYPED_TEST(DocumentMove, MoveAssignment) { ...@@ -565,7 +565,7 @@ TYPED_TEST(DocumentMove, MoveAssignment) {
EXPECT_EQ(2u, b.MemberCount()); EXPECT_EQ(2u, b.MemberCount());
// Document c; c = a; // does not compile (see static_assert) // Document c; c = a; // does not compile (see static_assert)
Document c; D c;
c = std::move(b); c = std::move(b);
EXPECT_TRUE(b.IsNull()); EXPECT_TRUE(b.IsNull());
EXPECT_TRUE(c.IsObject()); EXPECT_TRUE(c.IsObject());
...@@ -576,17 +576,17 @@ TYPED_TEST(DocumentMove, MoveAssignment) { ...@@ -576,17 +576,17 @@ TYPED_TEST(DocumentMove, MoveAssignment) {
TYPED_TEST(DocumentMove, MoveAssignmentParseError) { TYPED_TEST(DocumentMove, MoveAssignmentParseError) {
typedef TypeParam Allocator; typedef TypeParam Allocator;
typedef GenericDocument<UTF8<>, Allocator> Document; typedef GenericDocument<UTF8<>, Allocator> D;
ParseResult noError; ParseResult noError;
Document a; D a;
a.Parse("{ 4 = 4]"); a.Parse("{ 4 = 4]");
ParseResult error(a.GetParseError(), a.GetErrorOffset()); ParseResult error(a.GetParseError(), a.GetErrorOffset());
EXPECT_TRUE(a.HasParseError()); EXPECT_TRUE(a.HasParseError());
EXPECT_NE(error.Code(), noError.Code()); EXPECT_NE(error.Code(), noError.Code());
EXPECT_NE(error.Offset(), noError.Offset()); EXPECT_NE(error.Offset(), noError.Offset());
Document b; D b;
b = std::move(a); b = std::move(a);
EXPECT_FALSE(a.HasParseError()); EXPECT_FALSE(a.HasParseError());
EXPECT_TRUE(b.HasParseError()); EXPECT_TRUE(b.HasParseError());
...@@ -595,7 +595,7 @@ TYPED_TEST(DocumentMove, MoveAssignmentParseError) { ...@@ -595,7 +595,7 @@ TYPED_TEST(DocumentMove, MoveAssignmentParseError) {
EXPECT_EQ(a.GetErrorOffset(), noError.Offset()); EXPECT_EQ(a.GetErrorOffset(), noError.Offset());
EXPECT_EQ(b.GetErrorOffset(), error.Offset()); EXPECT_EQ(b.GetErrorOffset(), error.Offset());
Document c; D c;
c = std::move(b); c = std::move(b);
EXPECT_FALSE(b.HasParseError()); EXPECT_FALSE(b.HasParseError());
EXPECT_TRUE(c.HasParseError()); EXPECT_TRUE(c.HasParseError());
...@@ -612,9 +612,9 @@ TYPED_TEST(DocumentMove, MoveAssignmentParseError) { ...@@ -612,9 +612,9 @@ TYPED_TEST(DocumentMove, MoveAssignmentParseError) {
TYPED_TEST(DocumentMove, MoveAssignmentStack) { TYPED_TEST(DocumentMove, MoveAssignmentStack) {
typedef TypeParam Allocator; typedef TypeParam Allocator;
typedef UTF8<> Encoding; typedef UTF8<> Encoding;
typedef GenericDocument<Encoding, Allocator> Document; typedef GenericDocument<Encoding, Allocator> D;
Document a; D a;
size_t defaultCapacity = a.GetStackCapacity(); size_t defaultCapacity = a.GetStackCapacity();
// Trick Document into getting GetStackCapacity() to return non-zero // Trick Document into getting GetStackCapacity() to return non-zero
...@@ -625,12 +625,12 @@ TYPED_TEST(DocumentMove, MoveAssignmentStack) { ...@@ -625,12 +625,12 @@ TYPED_TEST(DocumentMove, MoveAssignmentStack) {
size_t capacity = a.GetStackCapacity(); size_t capacity = a.GetStackCapacity();
EXPECT_GT(capacity, 0u); EXPECT_GT(capacity, 0u);
Document b; D b;
b = std::move(a); b = std::move(a);
EXPECT_EQ(a.GetStackCapacity(), defaultCapacity); EXPECT_EQ(a.GetStackCapacity(), defaultCapacity);
EXPECT_EQ(b.GetStackCapacity(), capacity); EXPECT_EQ(b.GetStackCapacity(), capacity);
Document c; D c;
c = std::move(b); c = std::move(b);
EXPECT_EQ(b.GetStackCapacity(), defaultCapacity); EXPECT_EQ(b.GetStackCapacity(), defaultCapacity);
EXPECT_EQ(c.GetStackCapacity(), capacity); EXPECT_EQ(c.GetStackCapacity(), capacity);
......
...@@ -20,6 +20,11 @@ ...@@ -20,6 +20,11 @@
#include <sstream> #include <sstream>
#include <fstream> #include <fstream>
#ifdef _MSC_VER
RAPIDJSON_DIAG_PUSH
RAPIDJSON_DIAG_OFF(4702) // unreachable code
#endif
using namespace rapidjson; using namespace rapidjson;
using namespace std; using namespace std;
...@@ -168,4 +173,8 @@ TEST(IStreamWrapper, wfstream) { ...@@ -168,4 +173,8 @@ TEST(IStreamWrapper, wfstream) {
EXPECT_EQ(5, d.MemberCount()); EXPECT_EQ(5, d.MemberCount());
} }
#endif // RAPIDJSON_HAS_CXX11_RVALUE_REFS #endif
#ifdef _MSC_VER
RAPIDJSON_DIAG_POP
#endif
...@@ -720,7 +720,7 @@ TEST(Reader, ParseString_Error) { ...@@ -720,7 +720,7 @@ TEST(Reader, ParseString_Error) {
TEST_STRINGENCODING_ERROR(UTF32<>, UTF8<>, unsigned, ARRAY('[', '\"', 0x110000, '\"', ']', '\0')); TEST_STRINGENCODING_ERROR(UTF32<>, UTF8<>, unsigned, ARRAY('[', '\"', 0x110000, '\"', ']', '\0'));
// Malform ASCII sequence // Malform ASCII sequence
TEST_STRINGENCODING_ERROR(ASCII<>, UTF8<>, char, ARRAY('[', '\"', char(0x80), '\"', ']', '\0')); TEST_STRINGENCODING_ERROR(ASCII<>, UTF8<>, char, ARRAY('[', '\"', char(0x80u), '\"', ']', '\0'));
#undef ARRAY #undef ARRAY
#undef TEST_STRINGARRAY_ERROR #undef TEST_STRINGARRAY_ERROR
......
...@@ -35,6 +35,7 @@ int main(int argc, char **argv) { ...@@ -35,6 +35,7 @@ int main(int argc, char **argv) {
#ifdef _MSC_VER #ifdef _MSC_VER
_CrtMemState memoryState = { 0 }; _CrtMemState memoryState = { 0 };
(void)memoryState;
_CrtMemCheckpoint(&memoryState); _CrtMemCheckpoint(&memoryState);
//_CrtSetBreakAlloc(X); //_CrtSetBreakAlloc(X);
//void *testWhetherMemoryLeakDetectionWorks = malloc(1); //void *testWhetherMemoryLeakDetectionWorks = malloc(1);
......
...@@ -94,23 +94,23 @@ TEST(Value, Traits) { ...@@ -94,23 +94,23 @@ TEST(Value, Traits) {
#endif #endif
TEST(Value, MoveConstructor) { TEST(Value, MoveConstructor) {
typedef GenericValue<UTF8<>, CrtAllocator> Value; typedef GenericValue<UTF8<>, CrtAllocator> V;
Value::AllocatorType allocator; V::AllocatorType allocator;
Value x((Value(kArrayType))); V x((V(kArrayType)));
x.Reserve(4u, allocator); x.Reserve(4u, allocator);
x.PushBack(1, allocator).PushBack(2, allocator).PushBack(3, allocator).PushBack(4, allocator); x.PushBack(1, allocator).PushBack(2, allocator).PushBack(3, allocator).PushBack(4, allocator);
EXPECT_TRUE(x.IsArray()); EXPECT_TRUE(x.IsArray());
EXPECT_EQ(4u, x.Size()); EXPECT_EQ(4u, x.Size());
// Value y(x); // does not compile (!is_copy_constructible) // Value y(x); // does not compile (!is_copy_constructible)
Value y(std::move(x)); V y(std::move(x));
EXPECT_TRUE(x.IsNull()); EXPECT_TRUE(x.IsNull());
EXPECT_TRUE(y.IsArray()); EXPECT_TRUE(y.IsArray());
EXPECT_EQ(4u, y.Size()); EXPECT_EQ(4u, y.Size());
// Value z = y; // does not compile (!is_copy_assignable) // Value z = y; // does not compile (!is_copy_assignable)
Value z = std::move(y); V z = std::move(y);
EXPECT_TRUE(y.IsNull()); EXPECT_TRUE(y.IsNull());
EXPECT_TRUE(z.IsArray()); EXPECT_TRUE(z.IsArray());
EXPECT_EQ(4u, z.Size()); EXPECT_EQ(4u, z.Size());
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment