Fix issue #1805
* Add some restriction on pair partial specialization of to_json Signed-off-by: Camille Bégué <camille.begue.pro@gmail.com>
This commit is contained in:
parent
0245ae5157
commit
794a3d411a
3 changed files with 20 additions and 4 deletions
|
@ -302,8 +302,8 @@ void to_json(BasicJsonType& j, const T(&arr)[N])
|
||||||
external_constructor<value_t::array>::construct(j, arr);
|
external_constructor<value_t::array>::construct(j, arr);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename BasicJsonType, typename... Args>
|
template < typename BasicJsonType, typename T1, typename T2, enable_if_t < std::is_constructible<BasicJsonType, T1>::value&& std::is_constructible<BasicJsonType, T2>::value, int > = 0 >
|
||||||
void to_json(BasicJsonType& j, const std::pair<Args...>& p)
|
void to_json(BasicJsonType& j, const std::pair<T1, T2>& p)
|
||||||
{
|
{
|
||||||
j = { p.first, p.second };
|
j = { p.first, p.second };
|
||||||
}
|
}
|
||||||
|
|
|
@ -3733,8 +3733,8 @@ void to_json(BasicJsonType& j, const T(&arr)[N])
|
||||||
external_constructor<value_t::array>::construct(j, arr);
|
external_constructor<value_t::array>::construct(j, arr);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename BasicJsonType, typename... Args>
|
template < typename BasicJsonType, typename T1, typename T2, enable_if_t < std::is_constructible<BasicJsonType, T1>::value&& std::is_constructible<BasicJsonType, T2>::value, int > = 0 >
|
||||||
void to_json(BasicJsonType& j, const std::pair<Args...>& p)
|
void to_json(BasicJsonType& j, const std::pair<T1, T2>& p)
|
||||||
{
|
{
|
||||||
j = { p.first, p.second };
|
j = { p.first, p.second };
|
||||||
}
|
}
|
||||||
|
|
|
@ -159,6 +159,16 @@ bool operator==(Data const& lhs, Data const& rhs)
|
||||||
|
|
||||||
using float_json = nlohmann::basic_json<std::map, std::vector, std::string, bool, std::int64_t, std::uint64_t, float>;
|
using float_json = nlohmann::basic_json<std::map, std::vector, std::string, bool, std::int64_t, std::uint64_t, float>;
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////
|
||||||
|
// for #1805
|
||||||
|
/////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
struct NotSerializableData
|
||||||
|
{
|
||||||
|
int mydata;
|
||||||
|
float myfloat;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
TEST_CASE("regression tests")
|
TEST_CASE("regression tests")
|
||||||
{
|
{
|
||||||
|
@ -1820,6 +1830,12 @@ TEST_CASE("regression tests")
|
||||||
CHECK(j.contains(jptr1));
|
CHECK(j.contains(jptr1));
|
||||||
CHECK(j.contains(jptr2));
|
CHECK(j.contains(jptr2));
|
||||||
}
|
}
|
||||||
|
SECTION("issue #1805 - A pair<T1, T2> is json constructible only if T1 and T2 are json constructible")
|
||||||
|
{
|
||||||
|
static_assert(!std::is_constructible<json, std::pair<std::string, NotSerializableData>>::value, "");
|
||||||
|
static_assert(!std::is_constructible<json, std::pair<NotSerializableData, std::string>>::value, "");
|
||||||
|
static_assert(std::is_constructible<json, std::pair<int, std::string>>::value, "");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#if not defined(JSON_NOEXCEPTION)
|
#if not defined(JSON_NOEXCEPTION)
|
||||||
|
|
Loading…
Reference in a new issue