From ec9647ae63532501fd2e50a70cf54b5210ae8c45 Mon Sep 17 00:00:00 2001 From: Anthony VH Date: Mon, 4 Nov 2019 20:45:24 +0100 Subject: [PATCH] Moved test for #1647 regression to regressions file. --- test/src/unit-conversions.cpp | 25 ----------------------- test/src/unit-regression.cpp | 38 +++++++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+), 25 deletions(-) diff --git a/test/src/unit-conversions.cpp b/test/src/unit-conversions.cpp index 1a5033df..9d48e29d 100644 --- a/test/src/unit-conversions.cpp +++ b/test/src/unit-conversions.cpp @@ -1537,31 +1537,6 @@ NLOHMANN_JSON_SERIALIZE_ENUM(TaskState, {TS_COMPLETED, "completed"}, }) -namespace -{ -// Helper struct to test whether compile error does not trigger upon -// conversion of an enum in the presence of non-member operator== for -// user-defined type with "non default" from_json function (#1647). -struct NonDefaultFromJsonStruct { }; - -inline bool operator== (NonDefaultFromJsonStruct const& lhs, NonDefaultFromJsonStruct const& rhs) -{ - return true; -} -} - -namespace nlohmann -{ -template <> -struct adl_serializer -{ - static NonDefaultFromJsonStruct from_json (json const& j) - { - return {}; - } -}; -} - TEST_CASE("JSON to enum mapping") { SECTION("enum class") diff --git a/test/src/unit-regression.cpp b/test/src/unit-regression.cpp index 0c75dcbc..869d6cc8 100644 --- a/test/src/unit-regression.cpp +++ b/test/src/unit-regression.cpp @@ -159,6 +159,38 @@ bool operator==(Data const& lhs, Data const& rhs) using float_json = nlohmann::basic_json; +///////////////////////////////////////////////////////////////////// +// for #1647 +///////////////////////////////////////////////////////////////////// +namespace +{ +struct NonDefaultFromJsonStruct { }; + +inline bool operator== (NonDefaultFromJsonStruct const& lhs, NonDefaultFromJsonStruct const& rhs) +{ + return true; +} + +enum class for_1647 { one, two }; + +NLOHMANN_JSON_SERIALIZE_ENUM(for_1647, +{ + {for_1647::one, "one"}, + {for_1647::two, "two"}, +}) +} + +namespace nlohmann +{ +template <> +struct adl_serializer +{ + static NonDefaultFromJsonStruct from_json (json const& j) + { + return {}; + } +}; +} TEST_CASE("regression tests") { @@ -1820,6 +1852,12 @@ TEST_CASE("regression tests") CHECK(j.contains(jptr1)); CHECK(j.contains(jptr2)); } + + SECTION("issue #1647 - compile error when deserializing enum if both non-default from_json and non-member operator== exists for other type") + { + auto val = nlohmann::json("one").get(); + CHECK(val == for_1647::one); + } } #if not defined(JSON_NOEXCEPTION)