forked from bblanchon/ArduinoJson
Fixed invalid conversion in operator|(Variant, char*)
(fixes #1432)
This commit is contained in:
@ -1,6 +1,11 @@
|
|||||||
ArduinoJson: change log
|
ArduinoJson: change log
|
||||||
=======================
|
=======================
|
||||||
|
|
||||||
|
HEAD
|
||||||
|
----
|
||||||
|
|
||||||
|
* Fixed invalid conversion error in `operator|(JsonVariant, char*)` (issue #1432)
|
||||||
|
|
||||||
v6.17.1 (2020-11-07)
|
v6.17.1 (2020-11-07)
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
@ -137,6 +137,20 @@ TEST_CASE("JsonVariant::operator|()") {
|
|||||||
REQUIRE(result == "not default");
|
REQUIRE(result == "not default");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SECTION("const char* | char*") {
|
||||||
|
char dflt[] = "default";
|
||||||
|
variant.set("not default");
|
||||||
|
std::string result = variant | dflt;
|
||||||
|
REQUIRE(result == "not default");
|
||||||
|
}
|
||||||
|
|
||||||
|
SECTION("int | char*") {
|
||||||
|
char dflt[] = "default";
|
||||||
|
variant.set(42);
|
||||||
|
std::string result = variant | dflt;
|
||||||
|
REQUIRE(result == "default");
|
||||||
|
}
|
||||||
|
|
||||||
SECTION("const char* | int") {
|
SECTION("const char* | int") {
|
||||||
variant.set("not default");
|
variant.set("not default");
|
||||||
int result = variant | 42;
|
int result = variant | 42;
|
||||||
|
@ -19,15 +19,23 @@ CompareResult compare(const T1 &lhs, const T2 &rhs); // VariantCompare.cpp
|
|||||||
template <typename TVariant>
|
template <typename TVariant>
|
||||||
struct VariantOperators {
|
struct VariantOperators {
|
||||||
// Returns the default value if the VariantRef is undefined or incompatible
|
// Returns the default value if the VariantRef is undefined or incompatible
|
||||||
|
//
|
||||||
|
// int operator|(JsonVariant, int)
|
||||||
|
// float operator|(JsonVariant, float)
|
||||||
|
// bool operator|(JsonVariant, bool)
|
||||||
|
// const char* operator|(JsonVariant, const char*)
|
||||||
|
// char* operator|(JsonVariant, const char*)
|
||||||
template <typename T>
|
template <typename T>
|
||||||
friend typename enable_if<!IsVariant<T>::value, T>::type operator|(
|
friend typename enable_if<!IsVariant<T>::value,
|
||||||
const TVariant &variant, T defaultValue) {
|
typename VariantAs<T>::type>::type
|
||||||
|
operator|(const TVariant &variant, T defaultValue) {
|
||||||
if (variant.template is<T>())
|
if (variant.template is<T>())
|
||||||
return variant.template as<T>();
|
return variant.template as<T>();
|
||||||
else
|
else
|
||||||
return defaultValue;
|
return defaultValue;
|
||||||
}
|
}
|
||||||
// Returns the default value if the VariantRef is undefined or incompatible
|
//
|
||||||
|
// JsonVariant operator|(JsonVariant, JsonVariant)
|
||||||
template <typename T>
|
template <typename T>
|
||||||
friend typename enable_if<IsVariant<T>::value, typename T::variant_type>::type
|
friend typename enable_if<IsVariant<T>::value, typename T::variant_type>::type
|
||||||
operator|(const TVariant &variant, T defaultValue) {
|
operator|(const TVariant &variant, T defaultValue) {
|
||||||
|
Reference in New Issue
Block a user