diff --git a/CHANGELOG.md b/CHANGELOG.md index e82281e2..b28b8301 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,11 @@ ArduinoJson: change log ======================= +HEAD +---- + +* Improve error messages when using `char` or `char*` (issue #2043) + v7.0.2 (2024-01-19) ------ diff --git a/src/ArduinoJson/Variant/ConverterImpl.hpp b/src/ArduinoJson/Variant/ConverterImpl.hpp index cc89687e..8e35f72b 100644 --- a/src/ArduinoJson/Variant/ConverterImpl.hpp +++ b/src/ArduinoJson/Variant/ConverterImpl.hpp @@ -21,6 +21,10 @@ ARDUINOJSON_BEGIN_PUBLIC_NAMESPACE template struct Converter { + static_assert(!detail::is_same::value, + "type 'char' is not supported, use 'signed char', 'unsigned " + "char' or another integer type instead"); + static void toJson(const T& src, JsonVariant dst) { // clang-format off convertToJson(src, dst); // Error here? See https://arduinojson.org/v7/unsupported-set/ @@ -28,6 +32,9 @@ struct Converter { } static T fromJson(JsonVariantConst src) { + static_assert(!detail::is_same::value, + "type 'char*' is not supported, use 'const char*' instead"); + // clang-format off T result; // Error here? See https://arduinojson.org/v7/non-default-constructible/ convertFromJson(src, result); // Error here? See https://arduinojson.org/v7/unsupported-as/ @@ -36,6 +43,9 @@ struct Converter { } static bool checkJson(JsonVariantConst src) { + static_assert(!detail::is_same::value, + "type 'char*' is not supported, use 'const char*' instead"); + T dummy = T(); // clang-format off return canConvertFromJson(src, dummy); // Error here? See https://arduinojson.org/v7/unsupported-is/ diff --git a/src/ArduinoJson/Variant/VariantRefBase.hpp b/src/ArduinoJson/Variant/VariantRefBase.hpp index c81334af..da7226ae 100644 --- a/src/ArduinoJson/Variant/VariantRefBase.hpp +++ b/src/ArduinoJson/Variant/VariantRefBase.hpp @@ -91,11 +91,9 @@ class VariantRefBase : public VariantTag { // Returns true if the value is of the specified type. // https://arduinojson.org/v7/api/jsonvariant/is/ template - FORCE_INLINE typename enable_if::value && - !is_same::value && - !is_same::value, - bool>::type - is() const { + FORCE_INLINE + typename enable_if::value, bool>::type + is() const { return Converter::checkJson(getVariantConst()); }