mirror of
https://github.com/nlohmann/json.git
synced 2026-10-04 22:05:41 +01:00
Add versioned, ABI-tagged inline namespace and namespace macros (#3590)
* Add versioned inline namespace Add a versioned inline namespace to prevent ABI issues when linking code using multiple library versions. * Add namespace macros * Encode ABI information in inline namespace Add _diag suffix to inline namespace if JSON_DIAGNOSTICS is enabled, and _ldvcmp suffix if JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON is enabled. * Move ABI-affecting macros into abi_macros.hpp * Move std_fs namespace definition into std_fs.hpp * Remove std_fs namespace from unit test * Format more files in tests directory * Add unit tests * Update documentation * Fix GDB pretty printer * fixup! Add namespace macros * Derive ABI prefix from NLOHMANN_JSON_VERSION_*
This commit is contained in:
@@ -26,11 +26,16 @@ When the macro is not defined, the library will define it to its default value.
|
||||
|
||||
## Notes
|
||||
|
||||
!!! danger "ABI incompatibility"
|
||||
!!! note "ABI compatibility"
|
||||
|
||||
As this macro changes the definition of the `basic_json` object, it MUST be defined in the same way globally, even
|
||||
across different compilation units: `basic_json` objects with differently defined `JSON_DIAGNOSTICS` macros are
|
||||
not compatible!
|
||||
As of version 3.11.0, this macro is no longer required to be defined consistently throughout a codebase to avoid
|
||||
One Definition Rule (ODR) violations, as the value of this macro is encoded in the namespace, resulting in distinct
|
||||
symbol names.
|
||||
|
||||
This allows different parts of a codebase to use different versions or configurations of this library without
|
||||
causing improper behavior.
|
||||
|
||||
Where possible, it is still recommended that all code define this the same way for maximum interoperability.
|
||||
|
||||
## Examples
|
||||
|
||||
@@ -65,3 +70,4 @@ When the macro is not defined, the library will define it to its default value.
|
||||
## Version history
|
||||
|
||||
- Added in version 3.10.0.
|
||||
- As of version 3.11.0 the definition is allowed to vary between translation units.
|
||||
|
||||
Reference in New Issue
Block a user