Skip to content

Commit

Permalink
fix tests, avoid instantiating JSONSerializer when it will not be used
Browse files Browse the repository at this point in the history
  • Loading branch information
Théo DELRIEU committed Dec 15, 2016
1 parent 35682b4 commit 59ffbab
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 16 deletions.
19 changes: 10 additions & 9 deletions src/json.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -1525,13 +1525,14 @@ class basic_json
template <
typename T,
enable_if_t<not std::is_base_of<std::istream, uncvref_t<T>>::value and
not detail::is_compatible_basic_json_type<
uncvref_t<T>, basic_json_t>::value and
not detail::is_basic_json_nested_class<uncvref_t<T>, basic_json_t, primitive_iterator_t>::value and
not std::is_same<uncvref_t<T>, typename basic_json_t::array_t::iterator>::value and
not std::is_same<uncvref_t<T>, typename basic_json_t::object_t::iterator>::value and

detail::conjunction<detail::negation<detail::is_compatible_basic_json_type<
uncvref_t<T>, basic_json_t>>,
detail::has_to_json<JSONSerializer, basic_json,
uncvref_t<T>>::value,
uncvref_t<T>>>::value,
int> = 0>
basic_json(T &&val)
{
Expand Down Expand Up @@ -3229,10 +3230,10 @@ class basic_json

template <
typename T,
enable_if_t<not detail::is_compatible_basic_json_type<
uncvref_t<T>, basic_json_t>::value and
enable_if_t<detail::conjunction<detail::negation<detail::is_compatible_basic_json_type<
uncvref_t<T>, basic_json_t>>,
detail::has_from_json<JSONSerializer, basic_json_t,
uncvref_t<T>>::value,
uncvref_t<T>>>::value,
int> = 0>
auto get() const -> uncvref_t<T>
{
Expand All @@ -3249,10 +3250,10 @@ class basic_json
// This overload is chosen for non-default constructible user-defined-types
template <
typename T,
enable_if_t<not detail::is_compatible_basic_json_type<
T, basic_json_t>::value and
enable_if_t<detail::conjunction<detail::negation<detail::is_compatible_basic_json_type<
uncvref_t<T>, basic_json_t>>,
detail::has_non_default_from_json<JSONSerializer, basic_json_t,
T>::value,
uncvref_t<T>>>::value,
short> = 0>
T get() const
{
Expand Down
14 changes: 7 additions & 7 deletions test/src/unit-udt.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ SOFTWARE.
*/

#include <array>
#include <map>
#include <string>
#include <memory>
#include "catch.hpp"
Expand Down Expand Up @@ -173,19 +174,19 @@ namespace udt
template <typename Json>
void from_json(Json const& j, age &a)
{
a.m_val = j.get<int>();
a.m_val = j.template get<int>();
}

template <typename Json>
void from_json(Json const& j, name &n)
{
n.m_val = j.get<std::string>();
n.m_val = j.template get<std::string>();
}

template <typename Json>
void from_json(Json const &j, country &c)
{
const auto str = j.get<std::string>();
const auto str = j.template get<std::string>();
static const std::map<std::string, country> m = {
{u8"中华人民共和国", country::china},
{"France", country::france},
Expand All @@ -199,9 +200,9 @@ namespace udt
template <typename Json>
void from_json(Json const& j, person &p)
{
p.m_age = j["age"].get<age>();
p.m_name = j["name"].get<name>();
p.m_country = j["country"].get<country>();
p.m_age = j["age"].template get<age>();
p.m_name = j["name"].template get<name>();
p.m_country = j["country"].template get<country>();
}

void from_json(nlohmann::json const &j, address &a)
Expand Down Expand Up @@ -325,7 +326,6 @@ struct adl_serializer<udt::legacy_type>

TEST_CASE("adl_serializer specialization", "[udt]")
{

SECTION("partial specialization")
{
SECTION("to_json")
Expand Down

0 comments on commit 59ffbab

Please sign in to comment.