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:
Florian Albrechtskirchinger authored and GitHub committed 2022-07-30 21:59:13 +02:00
1 parent fca1ddda96
commit d909f80960
72 files changed
+23116 -561

No files matched your search

+14
View File
@@ -0,0 +1,14 @@
#include "doctest_compatibility.h"
#include <nlohmann/json_v3_10_5.hpp>
using nlohmann::json;
using nlohmann::ordered_json;
TEST_CASE("use library v3.10.5 without inline namespace")
{
json j;
j[ordered_json::json_pointer("/root")] = json::object();
// In v3.10.5 mixing json_pointers of different basic_json types
// results in implicit string conversion
CHECK(j.dump() == "{\"/root\":{}}");
}