fix tests, avoid instantiating JSONSerializer when it will not be used
This commit is contained in:
parent
d5ee5830ed
commit
aa2679a8ce
2 changed files with 17 additions and 16 deletions
19
src/json.hpp
19
src/json.hpp
|
@ -1614,13 +1614,14 @@ class basic_json
|
||||||
template <
|
template <
|
||||||
typename T,
|
typename T,
|
||||||
enable_if_t<not std::is_base_of<std::istream, uncvref_t<T>>::value and
|
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 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::array_t::iterator>::value and
|
||||||
not std::is_same<uncvref_t<T>, typename basic_json_t::object_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,
|
detail::has_to_json<JSONSerializer, basic_json,
|
||||||
uncvref_t<T>>::value,
|
uncvref_t<T>>>::value,
|
||||||
int> = 0>
|
int> = 0>
|
||||||
basic_json(T &&val)
|
basic_json(T &&val)
|
||||||
{
|
{
|
||||||
|
@ -3311,10 +3312,10 @@ class basic_json
|
||||||
|
|
||||||
template <
|
template <
|
||||||
typename T,
|
typename T,
|
||||||
enable_if_t<not detail::is_compatible_basic_json_type<
|
enable_if_t<detail::conjunction<detail::negation<detail::is_compatible_basic_json_type<
|
||||||
uncvref_t<T>, basic_json_t>::value and
|
uncvref_t<T>, basic_json_t>>,
|
||||||
detail::has_from_json<JSONSerializer, basic_json_t,
|
detail::has_from_json<JSONSerializer, basic_json_t,
|
||||||
uncvref_t<T>>::value,
|
uncvref_t<T>>>::value,
|
||||||
int> = 0>
|
int> = 0>
|
||||||
auto get() const -> uncvref_t<T>
|
auto get() const -> uncvref_t<T>
|
||||||
{
|
{
|
||||||
|
@ -3331,10 +3332,10 @@ class basic_json
|
||||||
// This overload is chosen for non-default constructible user-defined-types
|
// This overload is chosen for non-default constructible user-defined-types
|
||||||
template <
|
template <
|
||||||
typename T,
|
typename T,
|
||||||
enable_if_t<not detail::is_compatible_basic_json_type<
|
enable_if_t<detail::conjunction<detail::negation<detail::is_compatible_basic_json_type<
|
||||||
T, basic_json_t>::value and
|
uncvref_t<T>, basic_json_t>>,
|
||||||
detail::has_non_default_from_json<JSONSerializer, basic_json_t,
|
detail::has_non_default_from_json<JSONSerializer, basic_json_t,
|
||||||
T>::value,
|
uncvref_t<T>>>::value,
|
||||||
short> = 0>
|
short> = 0>
|
||||||
T get() const
|
T get() const
|
||||||
{
|
{
|
||||||
|
|
|
@ -27,6 +27,7 @@ SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <array>
|
#include <array>
|
||||||
|
#include <map>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include "catch.hpp"
|
#include "catch.hpp"
|
||||||
|
@ -173,19 +174,19 @@ namespace udt
|
||||||
template <typename Json>
|
template <typename Json>
|
||||||
void from_json(Json const& j, age &a)
|
void from_json(Json const& j, age &a)
|
||||||
{
|
{
|
||||||
a.m_val = j.get<int>();
|
a.m_val = j.template get<int>();
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename Json>
|
template <typename Json>
|
||||||
void from_json(Json const& j, name &n)
|
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>
|
template <typename Json>
|
||||||
void from_json(Json const &j, country &c)
|
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 = {
|
static const std::map<std::string, country> m = {
|
||||||
{u8"中华人民共和国", country::china},
|
{u8"中华人民共和国", country::china},
|
||||||
{"France", country::france},
|
{"France", country::france},
|
||||||
|
@ -199,9 +200,9 @@ namespace udt
|
||||||
template <typename Json>
|
template <typename Json>
|
||||||
void from_json(Json const& j, person &p)
|
void from_json(Json const& j, person &p)
|
||||||
{
|
{
|
||||||
p.m_age = j["age"].get<age>();
|
p.m_age = j["age"].template get<age>();
|
||||||
p.m_name = j["name"].get<name>();
|
p.m_name = j["name"].template get<name>();
|
||||||
p.m_country = j["country"].get<country>();
|
p.m_country = j["country"].template get<country>();
|
||||||
}
|
}
|
||||||
|
|
||||||
void from_json(nlohmann::json const &j, address &a)
|
void from_json(nlohmann::json const &j, address &a)
|
||||||
|
@ -325,7 +326,6 @@ struct adl_serializer<udt::legacy_type>
|
||||||
|
|
||||||
TEST_CASE("adl_serializer specialization", "[udt]")
|
TEST_CASE("adl_serializer specialization", "[udt]")
|
||||||
{
|
{
|
||||||
|
|
||||||
SECTION("partial specialization")
|
SECTION("partial specialization")
|
||||||
{
|
{
|
||||||
SECTION("to_json")
|
SECTION("to_json")
|
||||||
|
|
Loading…
Reference in a new issue