🚑 fix for #1169
This commit is contained in:
parent
04372a8c56
commit
347e77bdc1
3 changed files with 62 additions and 0 deletions
|
@ -22,6 +22,16 @@ namespace nlohmann
|
||||||
{
|
{
|
||||||
namespace detail
|
namespace detail
|
||||||
{
|
{
|
||||||
|
template<typename BasicJsonType>
|
||||||
|
void from_json(const BasicJsonType& j, typename std::nullptr_t& n)
|
||||||
|
{
|
||||||
|
if (JSON_UNLIKELY(not j.is_null()))
|
||||||
|
{
|
||||||
|
JSON_THROW(type_error::create(302, "type must be null, but is " + std::string(j.type_name())));
|
||||||
|
}
|
||||||
|
n = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
// overloads for basic_json template parameters
|
// overloads for basic_json template parameters
|
||||||
template<typename BasicJsonType, typename ArithmeticType,
|
template<typename BasicJsonType, typename ArithmeticType,
|
||||||
enable_if_t<std::is_arithmetic<ArithmeticType>::value and
|
enable_if_t<std::is_arithmetic<ArithmeticType>::value and
|
||||||
|
|
|
@ -952,6 +952,16 @@ namespace nlohmann
|
||||||
{
|
{
|
||||||
namespace detail
|
namespace detail
|
||||||
{
|
{
|
||||||
|
template<typename BasicJsonType>
|
||||||
|
void from_json(const BasicJsonType& j, typename std::nullptr_t& n)
|
||||||
|
{
|
||||||
|
if (JSON_UNLIKELY(not j.is_null()))
|
||||||
|
{
|
||||||
|
JSON_THROW(type_error::create(302, "type must be null, but is " + std::string(j.type_name())));
|
||||||
|
}
|
||||||
|
n = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
// overloads for basic_json template parameters
|
// overloads for basic_json template parameters
|
||||||
template<typename BasicJsonType, typename ArithmeticType,
|
template<typename BasicJsonType, typename ArithmeticType,
|
||||||
enable_if_t<std::is_arithmetic<ArithmeticType>::value and
|
enable_if_t<std::is_arithmetic<ArithmeticType>::value and
|
||||||
|
|
|
@ -433,6 +433,48 @@ TEST_CASE("value conversion")
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SECTION("get null (implicit)")
|
||||||
|
{
|
||||||
|
std::nullptr_t n;
|
||||||
|
json j(n);
|
||||||
|
|
||||||
|
std::nullptr_t n2 = j;
|
||||||
|
CHECK(n2 == n);
|
||||||
|
}
|
||||||
|
|
||||||
|
SECTION("get null (explicit)")
|
||||||
|
{
|
||||||
|
std::nullptr_t n;
|
||||||
|
json j(n);
|
||||||
|
|
||||||
|
auto n2 = j.get<std::nullptr_t>();
|
||||||
|
CHECK(n2 == n);
|
||||||
|
|
||||||
|
CHECK_THROWS_AS(json(json::value_t::string).get<std::nullptr_t>(), json::type_error&);
|
||||||
|
CHECK_THROWS_AS(json(json::value_t::object).get<std::nullptr_t>(), json::type_error&);
|
||||||
|
CHECK_THROWS_AS(json(json::value_t::array).get<std::nullptr_t>(), json::type_error&);
|
||||||
|
CHECK_THROWS_AS(json(json::value_t::boolean).get<std::nullptr_t>(), json::type_error&);
|
||||||
|
CHECK_THROWS_AS(json(json::value_t::number_integer).get<std::nullptr_t>(), json::type_error&);
|
||||||
|
CHECK_THROWS_AS(json(json::value_t::number_unsigned).get<std::nullptr_t>(), json::type_error&);
|
||||||
|
CHECK_THROWS_AS(json(json::value_t::number_float).get<std::nullptr_t>(), json::type_error&);
|
||||||
|
|
||||||
|
CHECK_THROWS_WITH(json(json::value_t::string).get<std::nullptr_t>(),
|
||||||
|
"[json.exception.type_error.302] type must be null, but is string");
|
||||||
|
CHECK_THROWS_WITH(json(json::value_t::object).get<std::nullptr_t>(),
|
||||||
|
"[json.exception.type_error.302] type must be null, but is object");
|
||||||
|
CHECK_THROWS_WITH(json(json::value_t::array).get<std::nullptr_t>(),
|
||||||
|
"[json.exception.type_error.302] type must be null, but is array");
|
||||||
|
CHECK_THROWS_WITH(json(json::value_t::boolean).get<std::nullptr_t>(),
|
||||||
|
"[json.exception.type_error.302] type must be null, but is boolean");
|
||||||
|
CHECK_THROWS_WITH(json(json::value_t::number_integer).get<std::nullptr_t>(),
|
||||||
|
"[json.exception.type_error.302] type must be null, but is number");
|
||||||
|
CHECK_THROWS_WITH(json(json::value_t::number_unsigned).get<std::nullptr_t>(),
|
||||||
|
"[json.exception.type_error.302] type must be null, but is number");
|
||||||
|
CHECK_THROWS_WITH(json(json::value_t::number_float).get<std::nullptr_t>(),
|
||||||
|
"[json.exception.type_error.302] type must be null, but is number");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
SECTION("get a string (implicit)")
|
SECTION("get a string (implicit)")
|
||||||
{
|
{
|
||||||
json::string_t s_reference{"Hello world"};
|
json::string_t s_reference{"Hello world"};
|
||||||
|
|
Loading…
Reference in a new issue