1
0
mirror of https://github.com/nlohmann/json.git synced 2025-07-22 15:21:52 +03:00

🐛 fix for #512

We totally forgot to implement the comparison operators other than ==
and != for scalar types. Consequently, comparing a JSON value with a
scalar type led to compile errors.
This commit is contained in:
Niels Lohmann
2017-04-07 15:44:41 +02:00
parent 4f6b63e492
commit 90273e930c
3 changed files with 211 additions and 0 deletions

View File

@ -6385,6 +6385,28 @@ class basic_json
return operator<(lhs_type, rhs_type);
}
/*!
@brief comparison: less than
@copydoc operator<(const_reference, const_reference)
*/
template<typename ScalarType, typename std::enable_if<
std::is_scalar<ScalarType>::value, int>::type = 0>
friend bool operator<(const_reference lhs, const ScalarType rhs) noexcept
{
return (lhs < basic_json(rhs));
}
/*!
@brief comparison: less than
@copydoc operator<(const_reference, const_reference)
*/
template<typename ScalarType, typename std::enable_if<
std::is_scalar<ScalarType>::value, int>::type = 0>
friend bool operator<(const ScalarType lhs, const_reference rhs) noexcept
{
return (basic_json(lhs) < rhs);
}
/*!
@brief comparison: less than or equal
@ -6407,6 +6429,28 @@ class basic_json
return not (rhs < lhs);
}
/*!
@brief comparison: less than or equal
@copydoc operator<=(const_reference, const_reference)
*/
template<typename ScalarType, typename std::enable_if<
std::is_scalar<ScalarType>::value, int>::type = 0>
friend bool operator<=(const_reference lhs, const ScalarType rhs) noexcept
{
return (lhs <= basic_json(rhs));
}
/*!
@brief comparison: less than or equal
@copydoc operator<=(const_reference, const_reference)
*/
template<typename ScalarType, typename std::enable_if<
std::is_scalar<ScalarType>::value, int>::type = 0>
friend bool operator<=(const ScalarType lhs, const_reference rhs) noexcept
{
return (basic_json(lhs) <= rhs);
}
/*!
@brief comparison: greater than
@ -6429,6 +6473,28 @@ class basic_json
return not (lhs <= rhs);
}
/*!
@brief comparison: greater than
@copydoc operator>(const_reference, const_reference)
*/
template<typename ScalarType, typename std::enable_if<
std::is_scalar<ScalarType>::value, int>::type = 0>
friend bool operator>(const_reference lhs, const ScalarType rhs) noexcept
{
return (lhs > basic_json(rhs));
}
/*!
@brief comparison: greater than
@copydoc operator>(const_reference, const_reference)
*/
template<typename ScalarType, typename std::enable_if<
std::is_scalar<ScalarType>::value, int>::type = 0>
friend bool operator>(const ScalarType lhs, const_reference rhs) noexcept
{
return (basic_json(lhs) > rhs);
}
/*!
@brief comparison: greater than or equal
@ -6451,6 +6517,28 @@ class basic_json
return not (lhs < rhs);
}
/*!
@brief comparison: greater than or equal
@copydoc operator>=(const_reference, const_reference)
*/
template<typename ScalarType, typename std::enable_if<
std::is_scalar<ScalarType>::value, int>::type = 0>
friend bool operator>=(const_reference lhs, const ScalarType rhs) noexcept
{
return (lhs >= basic_json(rhs));
}
/*!
@brief comparison: greater than or equal
@copydoc operator>=(const_reference, const_reference)
*/
template<typename ScalarType, typename std::enable_if<
std::is_scalar<ScalarType>::value, int>::type = 0>
friend bool operator>=(const ScalarType lhs, const_reference rhs) noexcept
{
return (basic_json(lhs) >= rhs);
}
/// @}