diff --git a/src/json.hpp b/src/json.hpp index ce2fb44e..6a6cbb85 100644 --- a/src/json.hpp +++ b/src/json.hpp @@ -62,7 +62,7 @@ SOFTWARE. #if (__clang_major__ * 10000 + __clang_minor__ * 100 + __clang_patchlevel__) < 30400 #error "unsupported Clang version - see https://github.com/nlohmann/json#supported-compilers" #endif -#elif defined(__GNUC__) +#elif defined(__GNUC__) && !(defined(__ICC) || defined(__INTEL_COMPILER)) #if (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) < 40900 #error "unsupported GCC version - see https://github.com/nlohmann/json#supported-compilers" #endif @@ -6320,7 +6320,7 @@ class serializer */ static constexpr std::size_t bytes_following(const uint8_t u) { - return ((0 <= u and u <= 127) ? 0 + return ((u <= 127) ? 0 : ((192 <= u and u <= 223) ? 1 : ((224 <= u and u <= 239) ? 2 : ((240 <= u and u <= 247) ? 3 : std::string::npos)))); @@ -6660,7 +6660,7 @@ class serializer return; } - const bool is_negative = x < 0; + const auto is_negative = std::signbit(x); std::size_t i = 0; // spare 1 byte for '\0' @@ -9759,7 +9759,7 @@ class basic_json , "incompatible pointer type"); // delegate the call to get_impl_ptr<>() const - return get_impl_ptr(static_cast(nullptr)); + return get_impl_ptr(static_cast(nullptr)); } /*! diff --git a/test/src/unit-cbor.cpp b/test/src/unit-cbor.cpp index 4ec03f23..02f3d482 100644 --- a/test/src/unit-cbor.cpp +++ b/test/src/unit-cbor.cpp @@ -739,13 +739,13 @@ TEST_CASE("CBOR") { SECTION("no byte follows") { - CHECK_THROWS_AS(json::from_cbor(std::vector({0xf9})), json::parse_error); + CHECK_THROWS_AS(json::from_cbor(std::vector({0xf9})), json::parse_error&); CHECK_THROWS_WITH(json::from_cbor(std::vector({0xf9})), "[json.exception.parse_error.110] parse error at 2: unexpected end of input"); } SECTION("only one byte follows") { - CHECK_THROWS_AS(json::from_cbor(std::vector({0xf9, 0x7c})), json::parse_error); + CHECK_THROWS_AS(json::from_cbor(std::vector({0xf9, 0x7c})), json::parse_error&); CHECK_THROWS_WITH(json::from_cbor(std::vector({0xf9, 0x7c})), "[json.exception.parse_error.110] parse error at 3: unexpected end of input"); } diff --git a/test/src/unit-deserialization.cpp b/test/src/unit-deserialization.cpp index 9f574807..2798f102 100644 --- a/test/src/unit-deserialization.cpp +++ b/test/src/unit-deserialization.cpp @@ -451,11 +451,11 @@ TEST_CASE("deserialization") SECTION("BOM only") { - CHECK_THROWS_AS(json::parse(bom), json::parse_error); + CHECK_THROWS_AS(json::parse(bom), json::parse_error&); CHECK_THROWS_WITH(json::parse(bom), "[json.exception.parse_error.101] parse error at 1: syntax error - unexpected end of input; expected '[', '{', or a literal"); - CHECK_THROWS_AS(json::parse(std::istringstream(bom)), json::parse_error); + CHECK_THROWS_AS(json::parse(std::istringstream(bom)), json::parse_error&); CHECK_THROWS_WITH(json::parse(std::istringstream(bom)), "[json.exception.parse_error.101] parse error at 1: syntax error - unexpected end of input; expected '[', '{', or a literal"); } @@ -468,22 +468,22 @@ TEST_CASE("deserialization") SECTION("2 byte of BOM") { - CHECK_THROWS_AS(json::parse(bom.substr(0, 2)), json::parse_error); + CHECK_THROWS_AS(json::parse(bom.substr(0, 2)), json::parse_error&); CHECK_THROWS_WITH(json::parse(bom), "[json.exception.parse_error.101] parse error at 1: syntax error - unexpected end of input; expected '[', '{', or a literal"); - CHECK_THROWS_AS(json::parse(std::istringstream(bom.substr(0, 2))), json::parse_error); + CHECK_THROWS_AS(json::parse(std::istringstream(bom.substr(0, 2))), json::parse_error&); CHECK_THROWS_WITH(json::parse(std::istringstream(bom)), "[json.exception.parse_error.101] parse error at 1: syntax error - unexpected end of input; expected '[', '{', or a literal"); } SECTION("1 byte of BOM") { - CHECK_THROWS_AS(json::parse(bom.substr(0, 1)), json::parse_error); + CHECK_THROWS_AS(json::parse(bom.substr(0, 1)), json::parse_error&); CHECK_THROWS_WITH(json::parse(bom), "[json.exception.parse_error.101] parse error at 1: syntax error - unexpected end of input; expected '[', '{', or a literal"); - CHECK_THROWS_AS(json::parse(std::istringstream(bom.substr(0, 1))), json::parse_error); + CHECK_THROWS_AS(json::parse(std::istringstream(bom.substr(0, 1))), json::parse_error&); CHECK_THROWS_WITH(json::parse(std::istringstream(bom)), "[json.exception.parse_error.101] parse error at 1: syntax error - unexpected end of input; expected '[', '{', or a literal"); } @@ -504,9 +504,9 @@ TEST_CASE("deserialization") CAPTURE(i2); std::string s = ""; - s.push_back(bom[0] + i0); - s.push_back(bom[1] + i1); - s.push_back(bom[2] + i2); + s.push_back(static_cast(bom[0] + i0)); + s.push_back(static_cast(bom[1] + i1)); + s.push_back(static_cast(bom[2] + i2)); if (i0 == 0 and i1 == 0 and i2 == 0) { @@ -517,8 +517,8 @@ TEST_CASE("deserialization") else { // any variation is an error - CHECK_THROWS_AS(json::parse(s + "null"), json::parse_error); - CHECK_THROWS_AS(json::parse(std::istringstream(s + "null")), json::parse_error); + CHECK_THROWS_AS(json::parse(s + "null"), json::parse_error&); + CHECK_THROWS_AS(json::parse(std::istringstream(s + "null")), json::parse_error&); } } }