forked from bblanchon/ArduinoJson
Remove JsonVariant::set(char)
This commit is contained in:
15
CHANGELOG.md
15
CHANGELOG.md
@ -4,9 +4,9 @@ ArduinoJson: change log
|
|||||||
HEAD
|
HEAD
|
||||||
----
|
----
|
||||||
|
|
||||||
* Removed `JsonVariant::as<char>()` (issue #1498)
|
* Removed support for `char` values, see below (issue #1498)
|
||||||
|
|
||||||
> ### BREAKING CHANGE
|
> ### BREAKING CHANGES
|
||||||
>
|
>
|
||||||
> We cannot cast a `JsonVariant` to a `char` anymore, so the following will break:
|
> We cannot cast a `JsonVariant` to a `char` anymore, so the following will break:
|
||||||
> ```c++
|
> ```c++
|
||||||
@ -16,6 +16,17 @@ HEAD
|
|||||||
> ```c++
|
> ```c++
|
||||||
> int8_t age = doc["age"]; // OK
|
> int8_t age = doc["age"]; // OK
|
||||||
> ```
|
> ```
|
||||||
|
>
|
||||||
|
> Similarly, we cannot assign from a `char` anymore, so the following will break:
|
||||||
|
> ```c++
|
||||||
|
> char age;
|
||||||
|
> doc["age"] = age; // error: no matching function for call to 'VariantRef::set(const char&)'
|
||||||
|
> ```
|
||||||
|
> Instead, you must use another integral type, such as `int8_t`:
|
||||||
|
> ```c++
|
||||||
|
> int8_t age;
|
||||||
|
> doc["age"] = age; // OK
|
||||||
|
> ```
|
||||||
|
|
||||||
v6.17.3 (2021-02-15)
|
v6.17.3 (2021-02-15)
|
||||||
-------
|
-------
|
||||||
|
@ -43,3 +43,5 @@ build_should_fail(delete_jsondocument)
|
|||||||
add_executable(variant_as_char variant_as_char.cpp)
|
add_executable(variant_as_char variant_as_char.cpp)
|
||||||
build_should_fail(variant_as_char)
|
build_should_fail(variant_as_char)
|
||||||
|
|
||||||
|
add_executable(assign_char assign_char.cpp)
|
||||||
|
build_should_fail(assign_char)
|
||||||
|
12
extras/tests/FailingBuilds/assign_char.cpp
Normal file
12
extras/tests/FailingBuilds/assign_char.cpp
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
// ArduinoJson - arduinojson.org
|
||||||
|
// Copyright Benoit Blanchon 2014-2021
|
||||||
|
// MIT License
|
||||||
|
|
||||||
|
#include <ArduinoJson.h>
|
||||||
|
|
||||||
|
// See issue #1498
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
DynamicJsonDocument doc(1024);
|
||||||
|
doc["dummy"] = 'A';
|
||||||
|
}
|
@ -46,6 +46,20 @@ class MemberProxy : public VariantOperators<MemberProxy<TObject, TStringRef> >,
|
|||||||
template <typename TValue>
|
template <typename TValue>
|
||||||
FORCE_INLINE typename enable_if<!is_array<TValue>::value, this_type &>::type
|
FORCE_INLINE typename enable_if<!is_array<TValue>::value, this_type &>::type
|
||||||
operator=(const TValue &src) {
|
operator=(const TValue &src) {
|
||||||
|
/********************************************************************
|
||||||
|
** THIS IS NOT A BUG IN THE LIBRARY **
|
||||||
|
** -------------------------------- **
|
||||||
|
** Get a compilation error pointing here? **
|
||||||
|
** It doesn't mean the error *is* here. **
|
||||||
|
** Often, it's because you try to assign the wrong value type. **
|
||||||
|
** **
|
||||||
|
** For example: **
|
||||||
|
** char age = 42 **
|
||||||
|
** doc["age"] = age; **
|
||||||
|
** Instead, use: **
|
||||||
|
** int8_t age = 42; **
|
||||||
|
** doc["age"] = age; **
|
||||||
|
********************************************************************/
|
||||||
getOrAddUpstreamMember().set(src);
|
getOrAddUpstreamMember().set(src);
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
@ -186,8 +186,9 @@ class VariantRef : public VariantRefBase<VariantData>,
|
|||||||
// set(unsigned long)
|
// set(unsigned long)
|
||||||
template <typename T>
|
template <typename T>
|
||||||
FORCE_INLINE bool set(
|
FORCE_INLINE bool set(
|
||||||
T value, typename enable_if<is_integral<T>::value &&
|
T value,
|
||||||
!is_same<bool, T>::value>::type * = 0) const {
|
typename enable_if<is_integral<T>::value && !is_same<bool, T>::value &&
|
||||||
|
!is_same<char, T>::value>::type * = 0) const {
|
||||||
return variantSetInteger<T>(_data, value);
|
return variantSetInteger<T>(_data, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user