mirror of
				https://github.com/eledio-devices/thirdparty-ArduinoJson.git
				synced 2025-10-31 08:42:39 +01:00 
			
		
		
		
	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