mirror of
https://github.com/nlohmann/json.git
synced 2026-07-12 05:25:09 +00:00
Guard optional assignment test behind JSON_USE_IMPLICIT_CONVERSIONS
opt_assign = j_null relies on basic_json's implicit conversion operator to satisfy std::optional's assignment operator template (which requires is_assignable, not just is_constructible). With implicit conversions disabled the operator is explicit, so the assignment doesn't compile at all rather than throwing at runtime. Fixes the ci_test_noimplicitconversions failure on #5269. Signed-off-by: Niels Lohmann <mail@nlohmann.me>
This commit is contained in:
@@ -1784,10 +1784,14 @@ TEST_CASE("std::optional")
|
||||
"[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.
|
||||
// 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";
|
||||
|
||||
Reference in New Issue
Block a user