From 0328f663408346625eabfb5529ce0ec837888889 Mon Sep 17 00:00:00 2001 From: Benoit Blanchon Date: Mon, 27 Mar 2023 11:00:20 +0200 Subject: [PATCH] Fix compatibility with GCC 5.2 --- extras/tests/JsonDeserializer/input_types.cpp | 24 +++++++++++++++++++ .../Deserialization/deserialize.hpp | 15 +++++++++++- 2 files changed, 38 insertions(+), 1 deletion(-) diff --git a/extras/tests/JsonDeserializer/input_types.cpp b/extras/tests/JsonDeserializer/input_types.cpp index 4ea619d6..ce92f2e8 100644 --- a/extras/tests/JsonDeserializer/input_types.cpp +++ b/extras/tests/JsonDeserializer/input_types.cpp @@ -24,6 +24,30 @@ TEST_CASE("deserializeJson(char*)") { } } +TEST_CASE("deserializeJson(unsigned char*, unsigned int)") { // issue #1897 + JsonDocument doc(1024); + + unsigned char input[] = "{\"hello\":\"world\"}"; + unsigned char* input_ptr = input; + unsigned int size = sizeof(input); + + DeserializationError err = deserializeJson(doc, input_ptr, size); + + REQUIRE(err == DeserializationError::Ok); +} + +TEST_CASE("deserializeJson(uint8_t*, size_t)") { // issue #1898 + JsonDocument doc(1024); + + uint8_t input[] = "{\"hello\":\"world\"}"; + uint8_t* input_ptr = input; + size_t size = sizeof(input); + + DeserializationError err = deserializeJson(doc, input_ptr, size); + + REQUIRE(err == DeserializationError::Ok); +} + TEST_CASE("deserializeJson(const std::string&)") { JsonDocument doc(4096); diff --git a/src/ArduinoJson/Deserialization/deserialize.hpp b/src/ArduinoJson/Deserialization/deserialize.hpp index 1d086804..9f4d78e8 100644 --- a/src/ArduinoJson/Deserialization/deserialize.hpp +++ b/src/ArduinoJson/Deserialization/deserialize.hpp @@ -12,6 +12,17 @@ ARDUINOJSON_BEGIN_PRIVATE_NAMESPACE +// A meta-function that returns the first type of the parameter pack +// or void if empty +template +struct first_or_void { + using type = void; +}; +template +struct first_or_void { + using type = T; +}; + template