fix issue#1275
This commit is contained in:
parent
28048d8207
commit
71830be06d
2 changed files with 50 additions and 0 deletions
|
@ -3788,6 +3788,31 @@ class basic_json
|
||||||
JSON_THROW(type_error::create(306, "cannot use value() with " + std::string(type_name())));
|
JSON_THROW(type_error::create(306, "cannot use value() with " + std::string(type_name())));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
@brief overload for a default value of type rvalue
|
||||||
|
@copydoc basic_json::value(const typename object_t::key_type&, const ValueType&) const
|
||||||
|
*/
|
||||||
|
template<class ValueType, typename std::enable_if<
|
||||||
|
std::is_convertible<basic_json_t, detail::uncvref_t<ValueType>>::value
|
||||||
|
and not std::is_same<value_t, ValueType>::value, int>::type = 0>
|
||||||
|
detail::uncvref_t<ValueType> value(const typename object_t::key_type& key, ValueType && default_value) &&
|
||||||
|
{
|
||||||
|
// only works for objects
|
||||||
|
if (JSON_HEDLEY_LIKELY(is_object()))
|
||||||
|
{
|
||||||
|
// if key is found, return value and given default value otherwise
|
||||||
|
const auto it = find(key);
|
||||||
|
if (it != end())
|
||||||
|
{
|
||||||
|
return std::move(it->template get_ref<ValueType&>());
|
||||||
|
}
|
||||||
|
|
||||||
|
return std::forward<ValueType>(default_value);
|
||||||
|
}
|
||||||
|
|
||||||
|
JSON_THROW(type_error::create(306, "cannot use value() with " + std::string(type_name())));
|
||||||
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@brief overload for a default value of type const char*
|
@brief overload for a default value of type const char*
|
||||||
@copydoc basic_json::value(const typename object_t::key_type&, const ValueType&) const
|
@copydoc basic_json::value(const typename object_t::key_type&, const ValueType&) const
|
||||||
|
|
|
@ -19566,6 +19566,31 @@ class basic_json
|
||||||
JSON_THROW(type_error::create(306, "cannot use value() with " + std::string(type_name())));
|
JSON_THROW(type_error::create(306, "cannot use value() with " + std::string(type_name())));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
@brief overload for a default value of type rvalue
|
||||||
|
@copydoc basic_json::value(const typename object_t::key_type&, const ValueType&) const
|
||||||
|
*/
|
||||||
|
template<class ValueType, typename std::enable_if<
|
||||||
|
std::is_convertible<basic_json_t, detail::uncvref_t<ValueType>>::value
|
||||||
|
and not std::is_same<value_t, ValueType>::value, int>::type = 0>
|
||||||
|
detail::uncvref_t<ValueType> value(const typename object_t::key_type& key, ValueType && default_value) &&
|
||||||
|
{
|
||||||
|
// only works for objects
|
||||||
|
if (JSON_HEDLEY_LIKELY(is_object()))
|
||||||
|
{
|
||||||
|
// if key is found, return value and given default value otherwise
|
||||||
|
const auto it = find(key);
|
||||||
|
if (it != end())
|
||||||
|
{
|
||||||
|
return std::move(it->template get_ref<ValueType&>());
|
||||||
|
}
|
||||||
|
|
||||||
|
return std::forward<ValueType>(default_value);
|
||||||
|
}
|
||||||
|
|
||||||
|
JSON_THROW(type_error::create(306, "cannot use value() with " + std::string(type_name())));
|
||||||
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@brief overload for a default value of type const char*
|
@brief overload for a default value of type const char*
|
||||||
@copydoc basic_json::value(const typename object_t::key_type&, const ValueType&) const
|
@copydoc basic_json::value(const typename object_t::key_type&, const ValueType&) const
|
||||||
|
|
Loading…
Reference in a new issue