JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON¶
#define JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON /* value */
This macro enables the (incorrect) legacy comparison behavior of discarded JSON values. Possible values are 1
to enable or 0
to disable (default).
When enabled, comparisons involving at least one discarded JSON value yield results as follows:
Operator | Result |
---|---|
== | false |
!= | true |
< | false |
<= | true |
>= | true |
> | false |
Otherwise, comparisons involving at least one discarded JSON value always yield false
.
Default definition¶
The default value is 0
.
#define JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON 0
When the macro is not defined, the library will define it to its default value.
Notes¶
Inconsistent behavior in C++20 and beyond
When targeting C++20 or above, enabling the legacy comparison behavior is strongly discouraged.
- The 3-way comparison operator (
<=>
) will always give the correct result (std::partial_ordering::unordered
) regardless of the value ofJSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON
. - Overloads for the equality and relational operators emulate the legacy behavior.
Code outside your control may use either 3-way comparison or the equality and relational operators, resulting in inconsistent and unpredictable behavior.
See operator<=>
for more information on 3-way comparison.
Deprecation
The legacy comparison behavior is deprecated and may be removed in a future major version release.
New code should not depend on it and existing code should try to remove or rewrite expressions relying on it.
CMake option
Legacy comparison can also be controlled with the CMake option JSON_LegacyDiscardedValueComparison
(OFF
by default) which defines JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON
accordingly.
Examples¶
Example
The code below switches on the legacy discarded value comparison behavior in the library.
#define JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON 1
#include <nlohmann/json.hpp>
...
Version history¶
- Added in version 3.11.0.