diff --git a/CMakeLists.txt b/CMakeLists.txt index 1583daa..22567b9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -103,7 +103,7 @@ endif() if (CMAKE_CXX_COMPILER_ID MATCHES "Clang") # using regular Clang or AppleClang - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall -Wconversion -Wshadow -Wno-sign-conversion -Werror=conversion") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall -Wconversion -Wshadow -Werror=conversion -Werror=sign-compare") elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") # using GCC set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall -Wconversion -Wshadow -Wextra -Werror=conversion") diff --git a/include/json/config.h b/include/json/config.h index 1b0581f..51027dd 100644 --- a/include/json/config.h +++ b/include/json/config.h @@ -114,6 +114,10 @@ #define JSONCPP_DEPRECATED(message) #endif // if !defined(JSONCPP_DEPRECATED) +#if __GNUC__ >= 6 +# define JSON_USE_INT64_DOUBLE_CONVERSION 1 +#endif + namespace Json { typedef int Int; typedef unsigned int UInt; diff --git a/src/lib_json/json_value.cpp b/src/lib_json/json_value.cpp index a1962e6..f598491 100644 --- a/src/lib_json/json_value.cpp +++ b/src/lib_json/json_value.cpp @@ -231,7 +231,7 @@ Value::CZString::CZString(const CZString& other) : cstr_(other.storage_.policy_ != noDuplication && other.cstr_ != 0 ? duplicateStringValue(other.cstr_, other.storage_.length_) : other.cstr_) { - storage_.policy_ = (other.cstr_ + storage_.policy_ = static_cast<unsigned>(other.cstr_ ? (static_cast<DuplicationPolicy>(other.storage_.policy_) == noDuplication ? noDuplication : duplicate) : static_cast<DuplicationPolicy>(other.storage_.policy_)); @@ -784,7 +784,8 @@ float Value::asFloat() const { #if !defined(JSON_USE_INT64_DOUBLE_CONVERSION) return static_cast<float>(value_.uint_); #else // if !defined(JSON_USE_INT64_DOUBLE_CONVERSION) - return integerToDouble(value_.uint_); + // This can fail (silently?) if the value is bigger than MAX_FLOAT. + return static_cast<float>(integerToDouble(value_.uint_)); #endif // if !defined(JSON_USE_INT64_DOUBLE_CONVERSION) case realValue: return static_cast<float>(value_.real_); diff --git a/src/lib_json/json_writer.cpp b/src/lib_json/json_writer.cpp index a2facee..9f11367 100644 --- a/src/lib_json/json_writer.cpp +++ b/src/lib_json/json_writer.cpp @@ -560,7 +560,7 @@ void StyledWriter::writeWithIndent(const std::string& value) { void StyledWriter::indent() { indentString_ += std::string(indentSize_, ' '); } void StyledWriter::unindent() { - assert(int(indentString_.size()) >= indentSize_); + assert(indentString_.size() >= indentSize_); indentString_.resize(indentString_.size() - indentSize_); } @@ -857,7 +857,7 @@ private: ChildValues childValues_; std::string indentString_; - int rightMargin_; + unsigned int rightMargin_; std::string indentation_; CommentStyle::Enum cs_; std::string colonSymbol_;