remove "fix" that caused #3077

This commit is contained in:
Niels Lohmann 2021-10-13 20:34:17 +02:00
parent 4b1cb9eee1
commit 9a35702da8
No known key found for this signature in database
GPG Key ID: 7F3CEA63AE251B69
3 changed files with 36 additions and 2 deletions

View File

@ -3069,7 +3069,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
ValueType get_impl(detail::priority_tag<0> /*unused*/) const noexcept(noexcept(
JSONSerializer<ValueType>::from_json(std::declval<const basic_json_t&>(), std::declval<ValueType&>())))
{
ValueType ret{};
ValueType ret;
JSONSerializer<ValueType>::from_json(*this, ret);
return ret;
}

View File

@ -20556,7 +20556,7 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec
ValueType get_impl(detail::priority_tag<0> /*unused*/) const noexcept(noexcept(
JSONSerializer<ValueType>::from_json(std::declval<const basic_json_t&>(), std::declval<ValueType&>())))
{
ValueType ret{};
ValueType ret;
JSONSerializer<ValueType>::from_json(*this, ret);
return ret;
}

View File

@ -189,6 +189,32 @@ template<class T>
class my_allocator : public std::allocator<T>
{};
/////////////////////////////////////////////////////////////////////
// for #3077
/////////////////////////////////////////////////////////////////////
class FooAlloc
{};
class Foo
{
public:
explicit Foo(const FooAlloc& = FooAlloc()) : value(false) {}
bool value;
};
class FooBar
{
public:
Foo foo;
};
inline void from_json(const nlohmann::json& j, FooBar& fb)
{
j.at("value").get_to(fb.foo.value);
}
TEST_CASE("regression tests 2")
{
SECTION("issue #1001 - Fix memory leak during parser callback")
@ -695,6 +721,14 @@ TEST_CASE("regression tests 2")
json k = json::from_cbor(my_vector);
CHECK(j == k);
}
SECTION("issue #3077 - explicit constructor with default does not compile")
{
json j;
j[0]["value"] = true;
std::vector<FooBar> foo;
j.get_to(foo);
}
}
DOCTEST_CLANG_SUPPRESS_WARNING_POP