diff --git a/CHANGELOG.md b/CHANGELOG.md index cf6e804d..c355955c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ HEAD ---- * Fix warning `function returns incomplete class type` on IAR (issue #2001) +* Fix `volatile bool` serialized as `1` or `0` instead of `true` or `false` (issue #2029) v6.21.4 (2023-12-07) ------- diff --git a/extras/tests/JsonVariant/types.cpp b/extras/tests/JsonVariant/types.cpp index 42242991..91b4c1e2 100644 --- a/extras/tests/JsonVariant/types.cpp +++ b/extras/tests/JsonVariant/types.cpp @@ -140,6 +140,13 @@ TEST_CASE("volatile") { DynamicJsonDocument doc(4096); JsonVariant variant = doc.to(); + SECTION("volatile bool") { // issue #2029 + volatile bool f = true; + variant.set(f); + CHECK(variant.is() == true); + CHECK(variant.as() == true); + } + SECTION("volatile int") { volatile int f = 42; variant.set(f); diff --git a/src/ArduinoJson/Variant/VariantImpl.hpp b/src/ArduinoJson/Variant/VariantImpl.hpp index 23edbe61..abeed0dc 100644 --- a/src/ArduinoJson/Variant/VariantImpl.hpp +++ b/src/ArduinoJson/Variant/VariantImpl.hpp @@ -137,7 +137,8 @@ VariantRefBase::is() const { template template inline bool VariantRefBase::set(const T& value) const { - Converter::toJson(value, getOrCreateVariant()); + Converter::type>::toJson(value, + getOrCreateVariant()); MemoryPool* pool = getPool(); return pool && !pool->overflowed(); }