Extend std::optional null regression coverage (assignment, get_to)

Adds two cases to the existing null-handling regression test for
std::optional<T>: assignment (opt = json_null) throws for the same
reason as direct construction, and get_to() correctly yields
std::nullopt. Prompted by a review comment on #5246 asking for a
fuller regression matrix; construction and get<optional<T>>() were
already covered by #5247.

Signed-off-by: Niels Lohmann <mail@nlohmann.me>
This commit is contained in:
Niels Lohmann
2026-07-11 18:49:11 +02:00
parent c60217e801
commit 0e535ba3bc
+11
View File
@@ -1782,6 +1782,17 @@ TEST_CASE("std::optional")
"[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.
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&);
// 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")