Extend std::optional null regression coverage (assignment, get_to) (#5269)
diff --git a/tests/src/unit-conversions.cpp b/tests/src/unit-conversions.cpp
index ad66234..1937aff 100644
--- a/tests/src/unit-conversions.cpp
+++ b/tests/src/unit-conversions.cpp
@@ -1782,6 +1782,21 @@
"[json.exception.type_error.302] type must be string, but is null", json::type_error&);
CHECK_THROWS_WITH_AS(std::optional<int>(j_null),
"[json.exception.type_error.302] type must be number, but is null", json::type_error&);
+
+ // Assignment goes through the same overload resolution as direct
+ // construction, so it throws for the same reason. This relies on
+ // basic_json's implicit conversion operator, so it only applies
+ // when JSON_USE_IMPLICIT_CONVERSIONS is enabled (the default).
+#if JSON_USE_IMPLICIT_CONVERSIONS
+ std::optional<std::string> opt_assign;
+ CHECK_THROWS_WITH_AS(opt_assign = j_null,
+ "[json.exception.type_error.302] type must be string, but is null", json::type_error&);
+#endif
+
+ // get_to() is the correct way to obtain std::nullopt from a JSON null.
+ std::optional<std::string> opt_get_to = "placeholder";
+ j_null.get_to(opt_get_to);
+ CHECK(opt_get_to == std::nullopt);
}
SECTION("string")