diff --git a/.github/labeler.yml b/.github/labeler.yml
new file mode 100644
index 000000000..024d3e6da
--- /dev/null
+++ b/.github/labeler.yml
@@ -0,0 +1,38 @@
+version: 1
+
+labels:
+- label: "documentation"
+ files:
+ - "README.md"
+
+- label: "documentation"
+ files:
+ - "docs/.*"
+
+- label: "tests"
+ files:
+ - "tests/.*"
+
+- label: "CMake"
+ files:
+ - ".*CMakeLists.txt"
+
+- label: "CMake"
+ files:
+ - "cmake/.*"
+
+- label: "CI"
+ files:
+ - "github/workflows/.*"
+
+- label: "CI"
+ files:
+ - "github/external_ci/.*"
+
+- label: "S"
+ size-below: 10
+- label: "M"
+ size-above: 9
+ size-below: 100
+- label: "L"
+ size-above: 100
diff --git a/.github/workflows/labeler.yml b/.github/workflows/labeler.yml
new file mode 100644
index 000000000..66cb7eb34
--- /dev/null
+++ b/.github/workflows/labeler.yml
@@ -0,0 +1,18 @@
+name: "Pull Request Labeler"
+
+on:
+ pull_request_target:
+ types: [opened, synchronize]
+
+jobs:
+ label:
+ permissions:
+ contents: read
+ pull-requests: write
+
+ runs-on: ubuntu-latest
+
+ steps:
+ - uses: srvaroa/labeler@master
+ env:
+ GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
diff --git a/.github/workflows/publish_documentation.yml b/.github/workflows/publish_documentation.yml
index c06d535f0..d0fb8f436 100644
--- a/.github/workflows/publish_documentation.yml
+++ b/.github/workflows/publish_documentation.yml
@@ -5,6 +5,10 @@ on:
push:
branches:
- develop
+ paths:
+ - docs/mkdocs/**
+ - docs/examples/**
+ workflow_dispatch:
# we don't want to have concurrent jobs, and we don't want to cancel running jobs to avoid broken publications
concurrency:
@@ -13,6 +17,7 @@ concurrency:
jobs:
publish_documentation:
+ if: github.repository == 'nlohmann/json'
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v3
diff --git a/.github/workflows/ubuntu.yml b/.github/workflows/ubuntu.yml
index 3903a45fe..c3e225873 100644
--- a/.github/workflows/ubuntu.yml
+++ b/.github/workflows/ubuntu.yml
@@ -138,6 +138,7 @@ jobs:
run: |
. /opt/intel/oneapi/setvars.sh
cmake --build build --target ci_icpc
+
ci_reuse_compliance:
runs-on: ubuntu-latest
steps:
diff --git a/README.md b/README.md
index eb413d07a..08622cfa1 100644
--- a/README.md
+++ b/README.md
@@ -1402,297 +1402,321 @@ I deeply appreciate the help of the following people.
-- [Teemperor](https://github.com/Teemperor) implemented CMake support and lcov integration, realized escape and Unicode handling in the string parser, and fixed the JSON serialization.
-- [elliotgoodrich](https://github.com/elliotgoodrich) fixed an issue with double deletion in the iterator classes.
-- [kirkshoop](https://github.com/kirkshoop) made the iterators of the class composable to other libraries.
-- [wancw](https://github.com/wanwc) fixed a bug that hindered the class to compile with Clang.
-- Tomas Åblad found a bug in the iterator implementation.
-- [Joshua C. Randall](https://github.com/jrandall) fixed a bug in the floating-point serialization.
-- [Aaron Burghardt](https://github.com/aburgh) implemented code to parse streams incrementally. Furthermore, he greatly improved the parser class by allowing the definition of a filter function to discard undesired elements while parsing.
-- [Daniel Kopeček](https://github.com/dkopecek) fixed a bug in the compilation with GCC 5.0.
-- [Florian Weber](https://github.com/Florianjw) fixed a bug in and improved the performance of the comparison operators.
-- [Eric Cornelius](https://github.com/EricMCornelius) pointed out a bug in the handling with NaN and infinity values. He also improved the performance of the string escaping.
-- [易思龙](https://github.com/likebeta) implemented a conversion from anonymous enums.
-- [kepkin](https://github.com/kepkin) patiently pushed forward the support for Microsoft Visual studio.
-- [gregmarr](https://github.com/gregmarr) simplified the implementation of reverse iterators and helped with numerous hints and improvements. In particular, he pushed forward the implementation of user-defined types.
-- [Caio Luppi](https://github.com/caiovlp) fixed a bug in the Unicode handling.
-- [dariomt](https://github.com/dariomt) fixed some typos in the examples.
-- [Daniel Frey](https://github.com/d-frey) cleaned up some pointers and implemented exception-safe memory allocation.
-- [Colin Hirsch](https://github.com/ColinH) took care of a small namespace issue.
-- [Huu Nguyen](https://github.com/whoshuu) correct a variable name in the documentation.
-- [Silverweed](https://github.com/silverweed) overloaded `parse()` to accept an rvalue reference.
-- [dariomt](https://github.com/dariomt) fixed a subtlety in MSVC type support and implemented the `get_ref()` function to get a reference to stored values.
-- [ZahlGraf](https://github.com/ZahlGraf) added a workaround that allows compilation using Android NDK.
-- [whackashoe](https://github.com/whackashoe) replaced a function that was marked as unsafe by Visual Studio.
-- [406345](https://github.com/406345) fixed two small warnings.
-- [Glen Fernandes](https://github.com/glenfe) noted a potential portability problem in the `has_mapped_type` function.
-- [Corbin Hughes](https://github.com/nibroc) fixed some typos in the contribution guidelines.
-- [twelsby](https://github.com/twelsby) fixed the array subscript operator, an issue that failed the MSVC build, and floating-point parsing/dumping. He further added support for unsigned integer numbers and implemented better roundtrip support for parsed numbers.
-- [Volker Diels-Grabsch](https://github.com/vog) fixed a link in the README file.
-- [msm-](https://github.com/msm-) added support for American Fuzzy Lop.
-- [Annihil](https://github.com/Annihil) fixed an example in the README file.
-- [Themercee](https://github.com/Themercee) noted a wrong URL in the README file.
-- [Lv Zheng](https://github.com/lv-zheng) fixed a namespace issue with `int64_t` and `uint64_t`.
-- [abc100m](https://github.com/abc100m) analyzed the issues with GCC 4.8 and proposed a [partial solution](https://github.com/nlohmann/json/pull/212).
-- [zewt](https://github.com/zewt) added useful notes to the README file about Android.
-- [Róbert Márki](https://github.com/robertmrk) added a fix to use move iterators and improved the integration via CMake.
-- [Chris Kitching](https://github.com/ChrisKitching) cleaned up the CMake files.
-- [Tom Needham](https://github.com/06needhamt) fixed a subtle bug with MSVC 2015 which was also proposed by [Michael K.](https://github.com/Epidal).
-- [Mário Feroldi](https://github.com/thelostt) fixed a small typo.
-- [duncanwerner](https://github.com/duncanwerner) found a really embarrassing performance regression in the 2.0.0 release.
-- [Damien](https://github.com/dtoma) fixed one of the last conversion warnings.
-- [Thomas Braun](https://github.com/t-b) fixed a warning in a test case and adjusted MSVC calls in the CI.
-- [Théo DELRIEU](https://github.com/theodelrieu) patiently and constructively oversaw the long way toward [iterator-range parsing](https://github.com/nlohmann/json/issues/290). He also implemented the magic behind the serialization/deserialization of user-defined types and split the single header file into smaller chunks.
-- [Stefan](https://github.com/5tefan) fixed a minor issue in the documentation.
-- [Vasil Dimov](https://github.com/vasild) fixed the documentation regarding conversions from `std::multiset`.
-- [ChristophJud](https://github.com/ChristophJud) overworked the CMake files to ease project inclusion.
-- [Vladimir Petrigo](https://github.com/vpetrigo) made a SFINAE hack more readable and added Visual Studio 17 to the build matrix.
-- [Denis Andrejew](https://github.com/seeekr) fixed a grammar issue in the README file.
-- [Pierre-Antoine Lacaze](https://github.com/palacaze) found a subtle bug in the `dump()` function.
-- [TurpentineDistillery](https://github.com/TurpentineDistillery) pointed to [`std::locale::classic()`](https://en.cppreference.com/w/cpp/locale/locale/classic) to avoid too much locale joggling, found some nice performance improvements in the parser, improved the benchmarking code, and realized locale-independent number parsing and printing.
-- [cgzones](https://github.com/cgzones) had an idea how to fix the Coverity scan.
-- [Jared Grubb](https://github.com/jaredgrubb) silenced a nasty documentation warning.
-- [Yixin Zhang](https://github.com/qwename) fixed an integer overflow check.
-- [Bosswestfalen](https://github.com/Bosswestfalen) merged two iterator classes into a smaller one.
-- [Daniel599](https://github.com/Daniel599) helped to get Travis execute the tests with Clang's sanitizers.
-- [Jonathan Lee](https://github.com/vjon) fixed an example in the README file.
-- [gnzlbg](https://github.com/gnzlbg) supported the implementation of user-defined types.
-- [Alexej Harm](https://github.com/qis) helped to get the user-defined types working with Visual Studio.
-- [Jared Grubb](https://github.com/jaredgrubb) supported the implementation of user-defined types.
-- [EnricoBilla](https://github.com/EnricoBilla) noted a typo in an example.
-- [Martin Hořeňovský](https://github.com/horenmar) found a way for a 2x speedup for the compilation time of the test suite.
-- [ukhegg](https://github.com/ukhegg) found proposed an improvement for the examples section.
-- [rswanson-ihi](https://github.com/rswanson-ihi) noted a typo in the README.
-- [Mihai Stan](https://github.com/stanmihai4) fixed a bug in the comparison with `nullptr`s.
-- [Tushar Maheshwari](https://github.com/tusharpm) added [cotire](https://github.com/sakra/cotire) support to speed up the compilation.
-- [TedLyngmo](https://github.com/TedLyngmo) noted a typo in the README, removed unnecessary bit arithmetic, and fixed some `-Weffc++` warnings.
-- [Krzysztof Woś](https://github.com/krzysztofwos) made exceptions more visible.
-- [ftillier](https://github.com/ftillier) fixed a compiler warning.
-- [tinloaf](https://github.com/tinloaf) made sure all pushed warnings are properly popped.
-- [Fytch](https://github.com/Fytch) found a bug in the documentation.
-- [Jay Sistar](https://github.com/Type1J) implemented a Meson build description.
-- [Henry Lee](https://github.com/HenryRLee) fixed a warning in ICC and improved the iterator implementation.
-- [Vincent Thiery](https://github.com/vthiery) maintains a package for the Conan package manager.
-- [Steffen](https://github.com/koemeet) fixed a potential issue with MSVC and `std::min`.
-- [Mike Tzou](https://github.com/Chocobo1) fixed some typos.
-- [amrcode](https://github.com/amrcode) noted a misleading documentation about comparison of floats.
-- [Oleg Endo](https://github.com/olegendo) reduced the memory consumption by replacing `` with ``.
-- [dan-42](https://github.com/dan-42) cleaned up the CMake files to simplify including/reusing of the library.
-- [Nikita Ofitserov](https://github.com/himikof) allowed for moving values from initializer lists.
-- [Greg Hurrell](https://github.com/wincent) fixed a typo.
-- [Dmitry Kukovinets](https://github.com/DmitryKuk) fixed a typo.
-- [kbthomp1](https://github.com/kbthomp1) fixed an issue related to the Intel OSX compiler.
-- [Markus Werle](https://github.com/daixtrose) fixed a typo.
-- [WebProdPP](https://github.com/WebProdPP) fixed a subtle error in a precondition check.
-- [Alex](https://github.com/leha-bot) noted an error in a code sample.
-- [Tom de Geus](https://github.com/tdegeus) reported some warnings with ICC and helped to fix them.
-- [Perry Kundert](https://github.com/pjkundert) simplified reading from input streams.
-- [Sonu Lohani](https://github.com/sonulohani) fixed a small compilation error.
-- [Jamie Seward](https://github.com/jseward) fixed all MSVC warnings.
-- [Nate Vargas](https://github.com/eld00d) added a Doxygen tag file.
-- [pvleuven](https://github.com/pvleuven) helped to fix a warning in ICC.
-- [Pavel](https://github.com/crea7or) helped to fix some warnings in MSVC.
-- [Jamie Seward](https://github.com/jseward) avoided unnecessary string copies in `find()` and `count()`.
-- [Mitja](https://github.com/Itja) fixed some typos.
-- [Jorrit Wronski](https://github.com/jowr) updated the Hunter package links.
-- [Matthias Möller](https://github.com/TinyTinni) added a `.natvis` for the MSVC debug view.
-- [bogemic](https://github.com/bogemic) fixed some C++17 deprecation warnings.
-- [Eren Okka](https://github.com/erengy) fixed some MSVC warnings.
-- [abolz](https://github.com/abolz) integrated the Grisu2 algorithm for proper floating-point formatting, allowing more roundtrip checks to succeed.
-- [Vadim Evard](https://github.com/Pipeliner) fixed a Markdown issue in the README.
-- [zerodefect](https://github.com/zerodefect) fixed a compiler warning.
-- [Kert](https://github.com/kaidokert) allowed to template the string type in the serialization and added the possibility to override the exceptional behavior.
-- [mark-99](https://github.com/mark-99) helped fixing an ICC error.
-- [Patrik Huber](https://github.com/patrikhuber) fixed links in the README file.
-- [johnfb](https://github.com/johnfb) found a bug in the implementation of CBOR's indefinite length strings.
-- [Paul Fultz II](https://github.com/pfultz2) added a note on the cget package manager.
-- [Wilson Lin](https://github.com/wla80) made the integration section of the README more concise.
-- [RalfBielig](https://github.com/ralfbielig) detected and fixed a memory leak in the parser callback.
-- [agrianius](https://github.com/agrianius) allowed to dump JSON to an alternative string type.
-- [Kevin Tonon](https://github.com/ktonon) overworked the C++11 compiler checks in CMake.
-- [Axel Huebl](https://github.com/ax3l) simplified a CMake check and added support for the [Spack package manager](https://spack.io).
-- [Carlos O'Ryan](https://github.com/coryan) fixed a typo.
-- [James Upjohn](https://github.com/jammehcow) fixed a version number in the compilers section.
-- [Chuck Atkins](https://github.com/chuckatkins) adjusted the CMake files to the CMake packaging guidelines and provided documentation for the CMake integration.
-- [Jan Schöppach](https://github.com/dns13) fixed a typo.
-- [martin-mfg](https://github.com/martin-mfg) fixed a typo.
-- [Matthias Möller](https://github.com/TinyTinni) removed the dependency from `std::stringstream`.
-- [agrianius](https://github.com/agrianius) added code to use alternative string implementations.
-- [Daniel599](https://github.com/Daniel599) allowed to use more algorithms with the `items()` function.
-- [Julius Rakow](https://github.com/jrakow) fixed the Meson include directory and fixed the links to [cppreference.com](cppreference.com).
-- [Sonu Lohani](https://github.com/sonulohani) fixed the compilation with MSVC 2015 in debug mode.
-- [grembo](https://github.com/grembo) fixed the test suite and re-enabled several test cases.
-- [Hyeon Kim](https://github.com/simnalamburt) introduced the macro `JSON_INTERNAL_CATCH` to control the exception handling inside the library.
-- [thyu](https://github.com/thyu) fixed a compiler warning.
-- [David Guthrie](https://github.com/LEgregius) fixed a subtle compilation error with Clang 3.4.2.
-- [Dennis Fischer](https://github.com/dennisfischer) allowed to call `find_package` without installing the library.
-- [Hyeon Kim](https://github.com/simnalamburt) fixed an issue with a double macro definition.
-- [Ben Berman](https://github.com/rivertam) made some error messages more understandable.
-- [zakalibit](https://github.com/zakalibit) fixed a compilation problem with the Intel C++ compiler.
-- [mandreyel](https://github.com/mandreyel) fixed a compilation problem.
-- [Kostiantyn Ponomarenko](https://github.com/koponomarenko) added version and license information to the Meson build file.
-- [Henry Schreiner](https://github.com/henryiii) added support for GCC 4.8.
-- [knilch](https://github.com/knilch0r) made sure the test suite does not stall when run in the wrong directory.
-- [Antonio Borondo](https://github.com/antonioborondo) fixed an MSVC 2017 warning.
-- [Dan Gendreau](https://github.com/dgendreau) implemented the `NLOHMANN_JSON_SERIALIZE_ENUM` macro to quickly define an enum/JSON mapping.
-- [efp](https://github.com/efp) added line and column information to parse errors.
-- [julian-becker](https://github.com/julian-becker) added BSON support.
-- [Pratik Chowdhury](https://github.com/pratikpc) added support for structured bindings.
-- [David Avedissian](https://github.com/davedissian) added support for Clang 5.0.1 (PS4 version).
-- [Jonathan Dumaresq](https://github.com/dumarjo) implemented an input adapter to read from `FILE*`.
-- [kjpus](https://github.com/kjpus) fixed a link in the documentation.
-- [Manvendra Singh](https://github.com/manu-chroma) fixed a typo in the documentation.
-- [ziggurat29](https://github.com/ziggurat29) fixed an MSVC warning.
-- [Sylvain Corlay](https://github.com/SylvainCorlay) added code to avoid an issue with MSVC.
-- [mefyl](https://github.com/mefyl) fixed a bug when JSON was parsed from an input stream.
-- [Millian Poquet](https://github.com/mpoquet) allowed to install the library via Meson.
-- [Michael Behrns-Miller](https://github.com/moodboom) found an issue with a missing namespace.
-- [Nasztanovics Ferenc](https://github.com/naszta) fixed a compilation issue with libc 2.12.
-- [Andreas Schwab](https://github.com/andreas-schwab) fixed the endian conversion.
-- [Mark-Dunning](https://github.com/Mark-Dunning) fixed a warning in MSVC.
-- [Gareth Sylvester-Bradley](https://github.com/garethsb-sony) added `operator/` for JSON Pointers.
-- [John-Mark](https://github.com/johnmarkwayve) noted a missing header.
-- [Vitaly Zaitsev](https://github.com/xvitaly) fixed compilation with GCC 9.0.
-- [Laurent Stacul](https://github.com/stac47) fixed compilation with GCC 9.0.
-- [Ivor Wanders](https://github.com/iwanders) helped to reduce the CMake requirement to version 3.1.
-- [njlr](https://github.com/njlr) updated the Buckaroo instructions.
-- [Lion](https://github.com/lieff) fixed a compilation issue with GCC 7 on CentOS.
-- [Isaac Nickaein](https://github.com/nickaein) improved the integer serialization performance and implemented the `contains()` function.
-- [past-due](https://github.com/past-due) suppressed an unfixable warning.
-- [Elvis Oric](https://github.com/elvisoric) improved Meson support.
-- [Matěj Plch](https://github.com/Afforix) fixed an example in the README.
-- [Mark Beckwith](https://github.com/wythe) fixed a typo.
-- [scinart](https://github.com/scinart) fixed bug in the serializer.
-- [Patrick Boettcher](https://github.com/pboettch) implemented `push_back()` and `pop_back()` for JSON Pointers.
-- [Bruno Oliveira](https://github.com/nicoddemus) added support for Conda.
-- [Michele Caini](https://github.com/skypjack) fixed links in the README.
-- [Hani](https://github.com/hnkb) documented how to install the library with NuGet.
-- [Mark Beckwith](https://github.com/wythe) fixed a typo.
-- [yann-morin-1998](https://github.com/yann-morin-1998) helped to reduce the CMake requirement to version 3.1.
-- [Konstantin Podsvirov](https://github.com/podsvirov) maintains a package for the MSYS2 software distro.
-- [remyabel](https://github.com/remyabel) added GNUInstallDirs to the CMake files.
-- [Taylor Howard](https://github.com/taylorhoward92) fixed a unit test.
-- [Gabe Ron](https://github.com/Macr0Nerd) implemented the `to_string` method.
-- [Watal M. Iwasaki](https://github.com/heavywatal) fixed a Clang warning.
-- [Viktor Kirilov](https://github.com/onqtam) switched the unit tests from [Catch](https://github.com/philsquared/Catch) to [doctest](https://github.com/onqtam/doctest)
-- [Juncheng E](https://github.com/ejcjason) fixed a typo.
-- [tete17](https://github.com/tete17) fixed a bug in the `contains` function.
-- [Xav83](https://github.com/Xav83) fixed some cppcheck warnings.
-- [0xflotus](https://github.com/0xflotus) fixed some typos.
-- [Christian Deneke](https://github.com/chris0x44) added a const version of `json_pointer::back`.
-- [Julien Hamaide](https://github.com/crazyjul) made the `items()` function work with custom string types.
-- [Evan Nemerson](https://github.com/nemequ) updated fixed a bug in Hedley and updated this library accordingly.
-- [Florian Pigorsch](https://github.com/flopp) fixed a lot of typos.
-- [Camille Bégué](https://github.com/cbegue) fixed an issue in the conversion from `std::pair` and `std::tuple` to `json`.
-- [Anthony VH](https://github.com/AnthonyVH) fixed a compile error in an enum deserialization.
-- [Yuriy Vountesmery](https://github.com/ua-code-dragon) noted a subtle bug in a preprocessor check.
-- [Chen](https://github.com/dota17) fixed numerous issues in the library.
-- [Antony Kellermann](https://github.com/aokellermann) added a CI step for GCC 10.1.
-- [Alex](https://github.com/gistrec) fixed an MSVC warning.
-- [Rainer](https://github.com/rvjr) proposed an improvement in the floating-point serialization in CBOR.
-- [Francois Chabot](https://github.com/FrancoisChabot) made performance improvements in the input adapters.
-- [Arthur Sonzogni](https://github.com/ArthurSonzogni) documented how the library can be included via `FetchContent`.
-- [Rimas Misevičius](https://github.com/rmisev) fixed an error message.
-- [Alexander Myasnikov](https://github.com/alexandermyasnikov) fixed some examples and a link in the README.
-- [Hubert Chathi](https://github.com/uhoreg) made CMake's version config file architecture-independent.
-- [OmnipotentEntity](https://github.com/OmnipotentEntity) implemented the binary values for CBOR, MessagePack, BSON, and UBJSON.
-- [ArtemSarmini](https://github.com/ArtemSarmini) fixed a compilation issue with GCC 10 and fixed a leak.
-- [Evgenii Sopov](https://github.com/sea-kg) integrated the library to the wsjcpp package manager.
-- [Sergey Linev](https://github.com/linev) fixed a compiler warning.
-- [Miguel Magalhães](https://github.com/magamig) fixed the year in the copyright.
-- [Gareth Sylvester-Bradley](https://github.com/garethsb-sony) fixed a compilation issue with MSVC.
-- [Alexander “weej” Jones](https://github.com/alex-weej) fixed an example in the README.
-- [Antoine Cœur](https://github.com/Coeur) fixed some typos in the documentation.
-- [jothepro](https://github.com/jothepro) updated links to the Hunter package.
-- [Dave Lee](https://github.com/kastiglione) fixed link in the README.
-- [Joël Lamotte](https://github.com/Klaim) added instruction for using Build2's package manager.
-- [Paul Jurczak](https://github.com/pauljurczak) fixed an example in the README.
-- [Sonu Lohani](https://github.com/sonulohani) fixed a warning.
-- [Carlos Gomes Martinho](https://github.com/gocarlos) updated the Conan package source.
-- [Konstantin Podsvirov](https://github.com/podsvirov) fixed the MSYS2 package documentation.
-- [Tridacnid](https://github.com/Tridacnid) improved the CMake tests.
-- [Michael](https://github.com/MBalszun) fixed MSVC warnings.
-- [Quentin Barbarat](https://github.com/quentin-dev) fixed an example in the documentation.
-- [XyFreak](https://github.com/XyFreak) fixed a compiler warning.
-- [TotalCaesar659](https://github.com/TotalCaesar659) fixed links in the README.
-- [Tanuj Garg](https://github.com/tanuj208) improved the fuzzer coverage for UBSAN input.
-- [AODQ](https://github.com/AODQ) fixed a compiler warning.
-- [jwittbrodt](https://github.com/jwittbrodt) made `NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE` inline.
-- [pfeatherstone](https://github.com/pfeatherstone) improved the upper bound of arguments of the `NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE`/`NLOHMANN_DEFINE_TYPE_INTRUSIVE` macros.
-- [Jan Procházka](https://github.com/jprochazk) fixed a bug in the CBOR parser for binary and string values.
-- [T0b1-iOS](https://github.com/T0b1-iOS) fixed a bug in the new hash implementation.
-- [Matthew Bauer](https://github.com/matthewbauer) adjusted the CBOR writer to create tags for binary subtypes.
-- [gatopeich](https://github.com/gatopeich) implemented an ordered map container for `nlohmann::ordered_json`.
-- [Érico Nogueira Rolim](https://github.com/ericonr) added support for pkg-config.
-- [KonanM](https://github.com/KonanM) proposed an implementation for the `NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE`/`NLOHMANN_DEFINE_TYPE_INTRUSIVE` macros.
-- [Guillaume Racicot](https://github.com/gracicot) implemented `string_view` support and allowed C++20 support.
-- [Alex Reinking](https://github.com/alexreinking) improved CMake support for `FetchContent`.
-- [Hannes Domani](https://github.com/ssbssa) provided a GDB pretty printer.
-- Lars Wirzenius reviewed the README file.
-- [Jun Jie](https://github.com/ongjunjie) fixed a compiler path in the CMake scripts.
-- [Ronak Buch](https://github.com/rbuch) fixed typos in the documentation.
-- [Alexander Karzhenkov](https://github.com/karzhenkov) fixed a move constructor and the Travis builds.
-- [Leonardo Lima](https://github.com/leozz37) added CPM.Cmake support.
-- [Joseph Blackman](https://github.com/jbzdarkid) fixed a warning.
-- [Yaroslav](https://github.com/YarikTH) updated doctest and implemented unit tests.
-- [Martin Stump](https://github.com/globberwops) fixed a bug in the CMake files.
-- [Jaakko Moisio](https://github.com/jasujm) fixed a bug in the input adapters.
-- [bl-ue](https://github.com/bl-ue) fixed some Markdown issues in the README file.
-- [William A. Wieselquist](https://github.com/wawiesel) fixed an example from the README.
-- [abbaswasim](https://github.com/abbaswasim) fixed an example from the README.
-- [Remy Jette](https://github.com/remyjette) fixed a warning.
-- [Fraser](https://github.com/frasermarlow) fixed the documentation.
-- [Ben Beasley](https://github.com/musicinmybrain) updated doctest.
-- [Doron Behar](https://github.com/doronbehar) fixed pkg-config.pc.
-- [raduteo](https://github.com/raduteo) fixed a warning.
-- [David Pfahler](https://github.com/theShmoo) added the possibility to compile the library without I/O support.
-- [Morten Fyhn Amundsen](https://github.com/mortenfyhn) fixed a typo.
-- [jpl-mac](https://github.com/jpl-mac) allowed to treat the library as a system header in CMake.
-- [Jason Dsouza](https://github.com/jasmcaus) fixed the indentation of the CMake file.
-- [offa](https://github.com/offa) added a link to Conan Center to the documentation.
-- [TotalCaesar659](https://github.com/TotalCaesar659) updated the links in the documentation to use HTTPS.
-- [Rafail Giavrimis](https://github.com/grafail) fixed the Google Benchmark default branch.
-- [Louis Dionne](https://github.com/ldionne) fixed a conversion operator.
-- [justanotheranonymoususer](https://github.com/justanotheranonymoususer) made the examples in the README more consistent.
-- [Finkman](https://github.com/Finkman) suppressed some `-Wfloat-equal` warnings.
-- [Ferry Huberts](https://github.com/fhuberts) fixed `-Wswitch-enum` warnings.
-- [Arseniy Terekhin](https://github.com/senyai) made the GDB pretty-printer robust against unset variable names.
-- [Amir Masoud Abdol](https://github.com/amirmasoudabdol) updated the Homebrew command as nlohmann/json is now in homebrew-core.
-- [Hallot](https://github.com/Hallot) fixed some `-Wextra-semi-stmt warnings`.
-- [Giovanni Cerretani](https://github.com/gcerretani) fixed `-Wunused` warnings on `JSON_DIAGNOSTICS`.
-- [Bogdan Popescu](https://github.com/Kapeli) hosts the [docset](https://github.com/Kapeli/Dash-User-Contributions/tree/master/docsets/JSON_for_Modern_C%2B%2B) for offline documentation viewers.
-- [Carl Smedstad](https://github.com/carlsmedstad) fixed an assertion error when using `JSON_DIAGNOSTICS`.
-- [miikka75](https://github.com/miikka75) provided an important fix to compile C++17 code with Clang 9.
-- [Maarten Becker](https://github.com/kernie) fixed a warning for shadowed variables.
-- [Cristi Vîjdea](https://github.com/axnsan12) fixed typos in the `operator[]` documentation.
-- [Alex Beregszaszi](https://github.com/axic) fixed spelling mistakes in comments.
-- [Dirk Stolle](https://github.com/striezel) fixed typos in documentation.
-- [Daniel Albuschat](https://github.com/daniel-kun) corrected the parameter name in the `parse` documentation.
-- [Prince Mendiratta](https://github.com/Prince-Mendiratta) fixed a link to the FAQ.
-- [Florian Albrechtskirchinger](https://github.com/falbrechtskirchinger) implemented `std::string_view` support for object keys and made dozens of other improvements.
-- [Qianqian Fang](https://github.com/fangq) implemented the Binary JData (BJData) format.
-- [pketelsen](https://github.com/pketelsen) added macros `NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT` and `NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT`.
-- [DarkZeros](https://github.com/DarkZeros) adjusted to code to not clash with Arduino defines.
-- [flagarde](https://github.com/flagarde) fixed the output of `meta()` for MSVC.
-- [Giovanni Cerretani](https://github.com/gcerretani) fixed a check for `std::filesystem`.
-- [Dimitris Apostolou](https://github.com/rex4539) fixed a typo.
-- [Ferry Huberts](https://github.com/fhuberts) fixed a typo.
-- [Michael Nosthoff](https://github.com/heinemml) fixed a typo.
-- [JungHoon Lee](https://github.com/jhnlee) fixed a typo.
-- [Faruk D.](https://github.com/fdiblen) fixed the CITATION.CFF file.
-- [Andrea Cocito](https://github.com/puffetto) added a clarification on macro usage to the documentation.
-- [Krzysiek Karbowiak](https://github.com/kkarbowiak) refactored the tests to use `CHECK_THROWS_WITH_AS`.
-- [Chaoqi Zhang](https://github.com/prncoprs) fixed a typo.
-- [ivanovmp](https://github.com/ivanovmp) fixed a whitespace error.
-- [KsaNL](https://github.com/KsaNL) fixed a build error when including ``.
-- [Andrea Pappacoda](https://github.com/Tachi107) moved `.pc` and `.cmake` files to `share` directory.
-- [Wolf Vollprecht](https://github.com/wolfv) added the `patch_inplace` function.
-- [Jake Zimmerman](https://github.com/jez) highlighted common usage patterns in the README file.
-- [NN](https://github.com/NN---) added some VS Code files to `.gitignore`.
-- [Romain Reignier](https://github.com/romainreignier) improved the performance the vector output adapter.
-- [Mike](https://github.com/Mike-Leo-Smith) fixed the `std::iterator_traits`.
-- [Richard Hozák](https://github.com/zxey) added macro `JSON_NO_ENUM` to disable default enum conversions.
-- [vakokako](https://github.com/vakokako) fixed tests when compiling with C++20.
+1. [Teemperor](https://github.com/Teemperor) implemented CMake support and lcov integration, realized escape and Unicode handling in the string parser, and fixed the JSON serialization.
+2. [elliotgoodrich](https://github.com/elliotgoodrich) fixed an issue with double deletion in the iterator classes.
+3. [kirkshoop](https://github.com/kirkshoop) made the iterators of the class composable to other libraries.
+4. [wancw](https://github.com/wanwc) fixed a bug that hindered the class to compile with Clang.
+5. Tomas Åblad found a bug in the iterator implementation.
+6. [Joshua C. Randall](https://github.com/jrandall) fixed a bug in the floating-point serialization.
+7. [Aaron Burghardt](https://github.com/aburgh) implemented code to parse streams incrementally. Furthermore, he greatly improved the parser class by allowing the definition of a filter function to discard undesired elements while parsing.
+8. [Daniel Kopeček](https://github.com/dkopecek) fixed a bug in the compilation with GCC 5.0.
+9. [Florian Weber](https://github.com/Florianjw) fixed a bug in and improved the performance of the comparison operators.
+10. [Eric Cornelius](https://github.com/EricMCornelius) pointed out a bug in the handling with NaN and infinity values. He also improved the performance of the string escaping.
+11. [易思龙](https://github.com/likebeta) implemented a conversion from anonymous enums.
+12. [kepkin](https://github.com/kepkin) patiently pushed forward the support for Microsoft Visual studio.
+13. [gregmarr](https://github.com/gregmarr) simplified the implementation of reverse iterators and helped with numerous hints and improvements. In particular, he pushed forward the implementation of user-defined types.
+14. [Caio Luppi](https://github.com/caiovlp) fixed a bug in the Unicode handling.
+15. [dariomt](https://github.com/dariomt) fixed some typos in the examples.
+16. [Daniel Frey](https://github.com/d-frey) cleaned up some pointers and implemented exception-safe memory allocation.
+17. [Colin Hirsch](https://github.com/ColinH) took care of a small namespace issue.
+18. [Huu Nguyen](https://github.com/whoshuu) correct a variable name in the documentation.
+19. [Silverweed](https://github.com/silverweed) overloaded `parse()` to accept an rvalue reference.
+20. [dariomt](https://github.com/dariomt) fixed a subtlety in MSVC type support and implemented the `get_ref()` function to get a reference to stored values.
+21. [ZahlGraf](https://github.com/ZahlGraf) added a workaround that allows compilation using Android NDK.
+22. [whackashoe](https://github.com/whackashoe) replaced a function that was marked as unsafe by Visual Studio.
+23. [406345](https://github.com/406345) fixed two small warnings.
+24. [Glen Fernandes](https://github.com/glenfe) noted a potential portability problem in the `has_mapped_type` function.
+25. [Corbin Hughes](https://github.com/nibroc) fixed some typos in the contribution guidelines.
+26. [twelsby](https://github.com/twelsby) fixed the array subscript operator, an issue that failed the MSVC build, and floating-point parsing/dumping. He further added support for unsigned integer numbers and implemented better roundtrip support for parsed numbers.
+27. [Volker Diels-Grabsch](https://github.com/vog) fixed a link in the README file.
+28. [msm-](https://github.com/msm-) added support for American Fuzzy Lop.
+29. [Annihil](https://github.com/Annihil) fixed an example in the README file.
+30. [Themercee](https://github.com/Themercee) noted a wrong URL in the README file.
+31. [Lv Zheng](https://github.com/lv-zheng) fixed a namespace issue with `int64_t` and `uint64_t`.
+32. [abc100m](https://github.com/abc100m) analyzed the issues with GCC 4.8 and proposed a [partial solution](https://github.com/nlohmann/json/pull/212).
+33. [zewt](https://github.com/zewt) added useful notes to the README file about Android.
+34. [Róbert Márki](https://github.com/robertmrk) added a fix to use move iterators and improved the integration via CMake.
+35. [Chris Kitching](https://github.com/ChrisKitching) cleaned up the CMake files.
+36. [Tom Needham](https://github.com/06needhamt) fixed a subtle bug with MSVC 2015 which was also proposed by [Michael K.](https://github.com/Epidal).
+37. [Mário Feroldi](https://github.com/thelostt) fixed a small typo.
+38. [duncanwerner](https://github.com/duncanwerner) found a really embarrassing performance regression in the 2.0.0 release.
+39. [Damien](https://github.com/dtoma) fixed one of the last conversion warnings.
+40. [Thomas Braun](https://github.com/t-b) fixed a warning in a test case and adjusted MSVC calls in the CI.
+41. [Théo DELRIEU](https://github.com/theodelrieu) patiently and constructively oversaw the long way toward [iterator-range parsing](https://github.com/nlohmann/json/issues/290). He also implemented the magic behind the serialization/deserialization of user-defined types and split the single header file into smaller chunks.
+42. [Stefan](https://github.com/5tefan) fixed a minor issue in the documentation.
+43. [Vasil Dimov](https://github.com/vasild) fixed the documentation regarding conversions from `std::multiset`.
+44. [ChristophJud](https://github.com/ChristophJud) overworked the CMake files to ease project inclusion.
+45. [Vladimir Petrigo](https://github.com/vpetrigo) made a SFINAE hack more readable and added Visual Studio 17 to the build matrix.
+46. [Denis Andrejew](https://github.com/seeekr) fixed a grammar issue in the README file.
+47. [Pierre-Antoine Lacaze](https://github.com/palacaze) found a subtle bug in the `dump()` function.
+48. [TurpentineDistillery](https://github.com/TurpentineDistillery) pointed to [`std::locale::classic()`](https://en.cppreference.com/w/cpp/locale/locale/classic) to avoid too much locale joggling, found some nice performance improvements in the parser, improved the benchmarking code, and realized locale-independent number parsing and printing.
+49. [cgzones](https://github.com/cgzones) had an idea how to fix the Coverity scan.
+50. [Jared Grubb](https://github.com/jaredgrubb) silenced a nasty documentation warning.
+51. [Yixin Zhang](https://github.com/qwename) fixed an integer overflow check.
+52. [Bosswestfalen](https://github.com/Bosswestfalen) merged two iterator classes into a smaller one.
+53. [Daniel599](https://github.com/Daniel599) helped to get Travis execute the tests with Clang's sanitizers.
+54. [Jonathan Lee](https://github.com/vjon) fixed an example in the README file.
+55. [gnzlbg](https://github.com/gnzlbg) supported the implementation of user-defined types.
+56. [Alexej Harm](https://github.com/qis) helped to get the user-defined types working with Visual Studio.
+57. [Jared Grubb](https://github.com/jaredgrubb) supported the implementation of user-defined types.
+58. [EnricoBilla](https://github.com/EnricoBilla) noted a typo in an example.
+59. [Martin Hořeňovský](https://github.com/horenmar) found a way for a 2x speedup for the compilation time of the test suite.
+60. [ukhegg](https://github.com/ukhegg) found proposed an improvement for the examples section.
+61. [rswanson-ihi](https://github.com/rswanson-ihi) noted a typo in the README.
+62. [Mihai Stan](https://github.com/stanmihai4) fixed a bug in the comparison with `nullptr`s.
+63. [Tushar Maheshwari](https://github.com/tusharpm) added [cotire](https://github.com/sakra/cotire) support to speed up the compilation.
+64. [TedLyngmo](https://github.com/TedLyngmo) noted a typo in the README, removed unnecessary bit arithmetic, and fixed some `-Weffc++` warnings.
+65. [Krzysztof Woś](https://github.com/krzysztofwos) made exceptions more visible.
+66. [ftillier](https://github.com/ftillier) fixed a compiler warning.
+67. [tinloaf](https://github.com/tinloaf) made sure all pushed warnings are properly popped.
+68. [Fytch](https://github.com/Fytch) found a bug in the documentation.
+69. [Jay Sistar](https://github.com/Type1J) implemented a Meson build description.
+70. [Henry Lee](https://github.com/HenryRLee) fixed a warning in ICC and improved the iterator implementation.
+71. [Vincent Thiery](https://github.com/vthiery) maintains a package for the Conan package manager.
+72. [Steffen](https://github.com/koemeet) fixed a potential issue with MSVC and `std::min`.
+73. [Mike Tzou](https://github.com/Chocobo1) fixed some typos.
+74. [amrcode](https://github.com/amrcode) noted a misleading documentation about comparison of floats.
+75. [Oleg Endo](https://github.com/olegendo) reduced the memory consumption by replacing `` with ``.
+76. [dan-42](https://github.com/dan-42) cleaned up the CMake files to simplify including/reusing of the library.
+77. [Nikita Ofitserov](https://github.com/himikof) allowed for moving values from initializer lists.
+78. [Greg Hurrell](https://github.com/wincent) fixed a typo.
+79. [Dmitry Kukovinets](https://github.com/DmitryKuk) fixed a typo.
+80. [kbthomp1](https://github.com/kbthomp1) fixed an issue related to the Intel OSX compiler.
+81. [Markus Werle](https://github.com/daixtrose) fixed a typo.
+82. [WebProdPP](https://github.com/WebProdPP) fixed a subtle error in a precondition check.
+83. [Alex](https://github.com/leha-bot) noted an error in a code sample.
+84. [Tom de Geus](https://github.com/tdegeus) reported some warnings with ICC and helped to fix them.
+85. [Perry Kundert](https://github.com/pjkundert) simplified reading from input streams.
+86. [Sonu Lohani](https://github.com/sonulohani) fixed a small compilation error.
+87. [Jamie Seward](https://github.com/jseward) fixed all MSVC warnings.
+88. [Nate Vargas](https://github.com/eld00d) added a Doxygen tag file.
+89. [pvleuven](https://github.com/pvleuven) helped to fix a warning in ICC.
+90. [Pavel](https://github.com/crea7or) helped to fix some warnings in MSVC.
+91. [Jamie Seward](https://github.com/jseward) avoided unnecessary string copies in `find()` and `count()`.
+92. [Mitja](https://github.com/Itja) fixed some typos.
+93. [Jorrit Wronski](https://github.com/jowr) updated the Hunter package links.
+94. [Matthias Möller](https://github.com/TinyTinni) added a `.natvis` for the MSVC debug view.
+95. [bogemic](https://github.com/bogemic) fixed some C++17 deprecation warnings.
+96. [Eren Okka](https://github.com/erengy) fixed some MSVC warnings.
+97. [abolz](https://github.com/abolz) integrated the Grisu2 algorithm for proper floating-point formatting, allowing more roundtrip checks to succeed.
+98. [Vadim Evard](https://github.com/Pipeliner) fixed a Markdown issue in the README.
+99. [zerodefect](https://github.com/zerodefect) fixed a compiler warning.
+100. [Kert](https://github.com/kaidokert) allowed to template the string type in the serialization and added the possibility to override the exceptional behavior.
+101. [mark-99](https://github.com/mark-99) helped fixing an ICC error.
+102. [Patrik Huber](https://github.com/patrikhuber) fixed links in the README file.
+103. [johnfb](https://github.com/johnfb) found a bug in the implementation of CBOR's indefinite length strings.
+104. [Paul Fultz II](https://github.com/pfultz2) added a note on the cget package manager.
+105. [Wilson Lin](https://github.com/wla80) made the integration section of the README more concise.
+106. [RalfBielig](https://github.com/ralfbielig) detected and fixed a memory leak in the parser callback.
+107. [agrianius](https://github.com/agrianius) allowed to dump JSON to an alternative string type.
+108. [Kevin Tonon](https://github.com/ktonon) overworked the C++11 compiler checks in CMake.
+109. [Axel Huebl](https://github.com/ax3l) simplified a CMake check and added support for the [Spack package manager](https://spack.io).
+110. [Carlos O'Ryan](https://github.com/coryan) fixed a typo.
+111. [James Upjohn](https://github.com/jammehcow) fixed a version number in the compilers section.
+112. [Chuck Atkins](https://github.com/chuckatkins) adjusted the CMake files to the CMake packaging guidelines and provided documentation for the CMake integration.
+113. [Jan Schöppach](https://github.com/dns13) fixed a typo.
+114. [martin-mfg](https://github.com/martin-mfg) fixed a typo.
+115. [Matthias Möller](https://github.com/TinyTinni) removed the dependency from `std::stringstream`.
+116. [agrianius](https://github.com/agrianius) added code to use alternative string implementations.
+117. [Daniel599](https://github.com/Daniel599) allowed to use more algorithms with the `items()` function.
+118. [Julius Rakow](https://github.com/jrakow) fixed the Meson include directory and fixed the links to [cppreference.com](cppreference.com).
+119. [Sonu Lohani](https://github.com/sonulohani) fixed the compilation with MSVC 2015 in debug mode.
+120. [grembo](https://github.com/grembo) fixed the test suite and re-enabled several test cases.
+121. [Hyeon Kim](https://github.com/simnalamburt) introduced the macro `JSON_INTERNAL_CATCH` to control the exception handling inside the library.
+122. [thyu](https://github.com/thyu) fixed a compiler warning.
+123. [David Guthrie](https://github.com/LEgregius) fixed a subtle compilation error with Clang 3.4.2.
+124. [Dennis Fischer](https://github.com/dennisfischer) allowed to call `find_package` without installing the library.
+125. [Hyeon Kim](https://github.com/simnalamburt) fixed an issue with a double macro definition.
+126. [Ben Berman](https://github.com/rivertam) made some error messages more understandable.
+127. [zakalibit](https://github.com/zakalibit) fixed a compilation problem with the Intel C++ compiler.
+128. [mandreyel](https://github.com/mandreyel) fixed a compilation problem.
+129. [Kostiantyn Ponomarenko](https://github.com/koponomarenko) added version and license information to the Meson build file.
+130. [Henry Schreiner](https://github.com/henryiii) added support for GCC 4.8.
+131. [knilch](https://github.com/knilch0r) made sure the test suite does not stall when run in the wrong directory.
+132. [Antonio Borondo](https://github.com/antonioborondo) fixed an MSVC 2017 warning.
+133. [Dan Gendreau](https://github.com/dgendreau) implemented the `NLOHMANN_JSON_SERIALIZE_ENUM` macro to quickly define an enum/JSON mapping.
+134. [efp](https://github.com/efp) added line and column information to parse errors.
+135. [julian-becker](https://github.com/julian-becker) added BSON support.
+136. [Pratik Chowdhury](https://github.com/pratikpc) added support for structured bindings.
+137. [David Avedissian](https://github.com/davedissian) added support for Clang 5.0.1 (PS4 version).
+138. [Jonathan Dumaresq](https://github.com/dumarjo) implemented an input adapter to read from `FILE*`.
+139. [kjpus](https://github.com/kjpus) fixed a link in the documentation.
+140. [Manvendra Singh](https://github.com/manu-chroma) fixed a typo in the documentation.
+141. [ziggurat29](https://github.com/ziggurat29) fixed an MSVC warning.
+142. [Sylvain Corlay](https://github.com/SylvainCorlay) added code to avoid an issue with MSVC.
+143. [mefyl](https://github.com/mefyl) fixed a bug when JSON was parsed from an input stream.
+144. [Millian Poquet](https://github.com/mpoquet) allowed to install the library via Meson.
+145. [Michael Behrns-Miller](https://github.com/moodboom) found an issue with a missing namespace.
+146. [Nasztanovics Ferenc](https://github.com/naszta) fixed a compilation issue with libc 2.12.
+147. [Andreas Schwab](https://github.com/andreas-schwab) fixed the endian conversion.
+148. [Mark-Dunning](https://github.com/Mark-Dunning) fixed a warning in MSVC.
+149. [Gareth Sylvester-Bradley](https://github.com/garethsb-sony) added `operator/` for JSON Pointers.
+150. [John-Mark](https://github.com/johnmarkwayve) noted a missing header.
+151. [Vitaly Zaitsev](https://github.com/xvitaly) fixed compilation with GCC 9.0.
+152. [Laurent Stacul](https://github.com/stac47) fixed compilation with GCC 9.0.
+153. [Ivor Wanders](https://github.com/iwanders) helped to reduce the CMake requirement to version 3.1.
+154. [njlr](https://github.com/njlr) updated the Buckaroo instructions.
+155. [Lion](https://github.com/lieff) fixed a compilation issue with GCC 7 on CentOS.
+156. [Isaac Nickaein](https://github.com/nickaein) improved the integer serialization performance and implemented the `contains()` function.
+157. [past-due](https://github.com/past-due) suppressed an unfixable warning.
+158. [Elvis Oric](https://github.com/elvisoric) improved Meson support.
+159. [Matěj Plch](https://github.com/Afforix) fixed an example in the README.
+160. [Mark Beckwith](https://github.com/wythe) fixed a typo.
+161. [scinart](https://github.com/scinart) fixed bug in the serializer.
+162. [Patrick Boettcher](https://github.com/pboettch) implemented `push_back()` and `pop_back()` for JSON Pointers.
+163. [Bruno Oliveira](https://github.com/nicoddemus) added support for Conda.
+164. [Michele Caini](https://github.com/skypjack) fixed links in the README.
+165. [Hani](https://github.com/hnkb) documented how to install the library with NuGet.
+166. [Mark Beckwith](https://github.com/wythe) fixed a typo.
+167. [yann-morin-1998](https://github.com/yann-morin-1998) helped to reduce the CMake requirement to version 3.1.
+168. [Konstantin Podsvirov](https://github.com/podsvirov) maintains a package for the MSYS2 software distro.
+169. [remyabel](https://github.com/remyabel) added GNUInstallDirs to the CMake files.
+170. [Taylor Howard](https://github.com/taylorhoward92) fixed a unit test.
+171. [Gabe Ron](https://github.com/Macr0Nerd) implemented the `to_string` method.
+172. [Watal M. Iwasaki](https://github.com/heavywatal) fixed a Clang warning.
+173. [Viktor Kirilov](https://github.com/onqtam) switched the unit tests from [Catch](https://github.com/philsquared/Catch) to [doctest](https://github.com/onqtam/doctest)
+174. [Juncheng E](https://github.com/ejcjason) fixed a typo.
+175. [tete17](https://github.com/tete17) fixed a bug in the `contains` function.
+176. [Xav83](https://github.com/Xav83) fixed some cppcheck warnings.
+177. [0xflotus](https://github.com/0xflotus) fixed some typos.
+178. [Christian Deneke](https://github.com/chris0x44) added a const version of `json_pointer::back`.
+179. [Julien Hamaide](https://github.com/crazyjul) made the `items()` function work with custom string types.
+180. [Evan Nemerson](https://github.com/nemequ) updated fixed a bug in Hedley and updated this library accordingly.
+181. [Florian Pigorsch](https://github.com/flopp) fixed a lot of typos.
+182. [Camille Bégué](https://github.com/cbegue) fixed an issue in the conversion from `std::pair` and `std::tuple` to `json`.
+183. [Anthony VH](https://github.com/AnthonyVH) fixed a compile error in an enum deserialization.
+184. [Yuriy Vountesmery](https://github.com/ua-code-dragon) noted a subtle bug in a preprocessor check.
+185. [Chen](https://github.com/dota17) fixed numerous issues in the library.
+186. [Antony Kellermann](https://github.com/aokellermann) added a CI step for GCC 10.1.
+187. [Alex](https://github.com/gistrec) fixed an MSVC warning.
+188. [Rainer](https://github.com/rvjr) proposed an improvement in the floating-point serialization in CBOR.
+189. [Francois Chabot](https://github.com/FrancoisChabot) made performance improvements in the input adapters.
+190. [Arthur Sonzogni](https://github.com/ArthurSonzogni) documented how the library can be included via `FetchContent`.
+191. [Rimas Misevičius](https://github.com/rmisev) fixed an error message.
+192. [Alexander Myasnikov](https://github.com/alexandermyasnikov) fixed some examples and a link in the README.
+193. [Hubert Chathi](https://github.com/uhoreg) made CMake's version config file architecture-independent.
+194. [OmnipotentEntity](https://github.com/OmnipotentEntity) implemented the binary values for CBOR, MessagePack, BSON, and UBJSON.
+195. [ArtemSarmini](https://github.com/ArtemSarmini) fixed a compilation issue with GCC 10 and fixed a leak.
+196. [Evgenii Sopov](https://github.com/sea-kg) integrated the library to the wsjcpp package manager.
+197. [Sergey Linev](https://github.com/linev) fixed a compiler warning.
+198. [Miguel Magalhães](https://github.com/magamig) fixed the year in the copyright.
+199. [Gareth Sylvester-Bradley](https://github.com/garethsb-sony) fixed a compilation issue with MSVC.
+200. [Alexander “weej” Jones](https://github.com/alex-weej) fixed an example in the README.
+201. [Antoine Cœur](https://github.com/Coeur) fixed some typos in the documentation.
+202. [jothepro](https://github.com/jothepro) updated links to the Hunter package.
+203. [Dave Lee](https://github.com/kastiglione) fixed link in the README.
+204. [Joël Lamotte](https://github.com/Klaim) added instruction for using Build2's package manager.
+205. [Paul Jurczak](https://github.com/pauljurczak) fixed an example in the README.
+206. [Sonu Lohani](https://github.com/sonulohani) fixed a warning.
+207. [Carlos Gomes Martinho](https://github.com/gocarlos) updated the Conan package source.
+208. [Konstantin Podsvirov](https://github.com/podsvirov) fixed the MSYS2 package documentation.
+209. [Tridacnid](https://github.com/Tridacnid) improved the CMake tests.
+210. [Michael](https://github.com/MBalszun) fixed MSVC warnings.
+211. [Quentin Barbarat](https://github.com/quentin-dev) fixed an example in the documentation.
+212. [XyFreak](https://github.com/XyFreak) fixed a compiler warning.
+213. [TotalCaesar659](https://github.com/TotalCaesar659) fixed links in the README.
+214. [Tanuj Garg](https://github.com/tanuj208) improved the fuzzer coverage for UBSAN input.
+215. [AODQ](https://github.com/AODQ) fixed a compiler warning.
+216. [jwittbrodt](https://github.com/jwittbrodt) made `NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE` inline.
+217. [pfeatherstone](https://github.com/pfeatherstone) improved the upper bound of arguments of the `NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE`/`NLOHMANN_DEFINE_TYPE_INTRUSIVE` macros.
+218. [Jan Procházka](https://github.com/jprochazk) fixed a bug in the CBOR parser for binary and string values.
+219. [T0b1-iOS](https://github.com/T0b1-iOS) fixed a bug in the new hash implementation.
+220. [Matthew Bauer](https://github.com/matthewbauer) adjusted the CBOR writer to create tags for binary subtypes.
+221. [gatopeich](https://github.com/gatopeich) implemented an ordered map container for `nlohmann::ordered_json`.
+222. [Érico Nogueira Rolim](https://github.com/ericonr) added support for pkg-config.
+223. [KonanM](https://github.com/KonanM) proposed an implementation for the `NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE`/`NLOHMANN_DEFINE_TYPE_INTRUSIVE` macros.
+224. [Guillaume Racicot](https://github.com/gracicot) implemented `string_view` support and allowed C++20 support.
+225. [Alex Reinking](https://github.com/alexreinking) improved CMake support for `FetchContent`.
+226. [Hannes Domani](https://github.com/ssbssa) provided a GDB pretty printer.
+227. Lars Wirzenius reviewed the README file.
+228. [Jun Jie](https://github.com/ongjunjie) fixed a compiler path in the CMake scripts.
+229. [Ronak Buch](https://github.com/rbuch) fixed typos in the documentation.
+230. [Alexander Karzhenkov](https://github.com/karzhenkov) fixed a move constructor and the Travis builds.
+231. [Leonardo Lima](https://github.com/leozz37) added CPM.Cmake support.
+232. [Joseph Blackman](https://github.com/jbzdarkid) fixed a warning.
+233. [Yaroslav](https://github.com/YarikTH) updated doctest and implemented unit tests.
+234. [Martin Stump](https://github.com/globberwops) fixed a bug in the CMake files.
+235. [Jaakko Moisio](https://github.com/jasujm) fixed a bug in the input adapters.
+236. [bl-ue](https://github.com/bl-ue) fixed some Markdown issues in the README file.
+237. [William A. Wieselquist](https://github.com/wawiesel) fixed an example from the README.
+238. [abbaswasim](https://github.com/abbaswasim) fixed an example from the README.
+239. [Remy Jette](https://github.com/remyjette) fixed a warning.
+240. [Fraser](https://github.com/frasermarlow) fixed the documentation.
+241. [Ben Beasley](https://github.com/musicinmybrain) updated doctest.
+242. [Doron Behar](https://github.com/doronbehar) fixed pkg-config.pc.
+243. [raduteo](https://github.com/raduteo) fixed a warning.
+244. [David Pfahler](https://github.com/theShmoo) added the possibility to compile the library without I/O support.
+245. [Morten Fyhn Amundsen](https://github.com/mortenfyhn) fixed a typo.
+246. [jpl-mac](https://github.com/jpl-mac) allowed to treat the library as a system header in CMake.
+247. [Jason Dsouza](https://github.com/jasmcaus) fixed the indentation of the CMake file.
+248. [offa](https://github.com/offa) added a link to Conan Center to the documentation.
+249. [TotalCaesar659](https://github.com/TotalCaesar659) updated the links in the documentation to use HTTPS.
+250. [Rafail Giavrimis](https://github.com/grafail) fixed the Google Benchmark default branch.
+251. [Louis Dionne](https://github.com/ldionne) fixed a conversion operator.
+252. [justanotheranonymoususer](https://github.com/justanotheranonymoususer) made the examples in the README more consistent.
+253. [Finkman](https://github.com/Finkman) suppressed some `-Wfloat-equal` warnings.
+254. [Ferry Huberts](https://github.com/fhuberts) fixed `-Wswitch-enum` warnings.
+255. [Arseniy Terekhin](https://github.com/senyai) made the GDB pretty-printer robust against unset variable names.
+256. [Amir Masoud Abdol](https://github.com/amirmasoudabdol) updated the Homebrew command as nlohmann/json is now in homebrew-core.
+257. [Hallot](https://github.com/Hallot) fixed some `-Wextra-semi-stmt warnings`.
+258. [Giovanni Cerretani](https://github.com/gcerretani) fixed `-Wunused` warnings on `JSON_DIAGNOSTICS`.
+259. [Bogdan Popescu](https://github.com/Kapeli) hosts the [docset](https://github.com/Kapeli/Dash-User-Contributions/tree/master/docsets/JSON_for_Modern_C%2B%2B) for offline documentation viewers.
+260. [Carl Smedstad](https://github.com/carlsmedstad) fixed an assertion error when using `JSON_DIAGNOSTICS`.
+261. [miikka75](https://github.com/miikka75) provided an important fix to compile C++17 code with Clang 9.
+262. [Maarten Becker](https://github.com/kernie) fixed a warning for shadowed variables.
+263. [Cristi Vîjdea](https://github.com/axnsan12) fixed typos in the `operator[]` documentation.
+264. [Alex Beregszaszi](https://github.com/axic) fixed spelling mistakes in comments.
+265. [Dirk Stolle](https://github.com/striezel) fixed typos in documentation.
+266. [Daniel Albuschat](https://github.com/daniel-kun) corrected the parameter name in the `parse` documentation.
+267. [Prince Mendiratta](https://github.com/Prince-Mendiratta) fixed a link to the FAQ.
+268. [Florian Albrechtskirchinger](https://github.com/falbrechtskirchinger) implemented `std::string_view` support for object keys and made dozens of other improvements.
+269. [Qianqian Fang](https://github.com/fangq) implemented the Binary JData (BJData) format.
+270. [pketelsen](https://github.com/pketelsen) added macros `NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT` and `NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT`.
+271. [DarkZeros](https://github.com/DarkZeros) adjusted to code to not clash with Arduino defines.
+272. [flagarde](https://github.com/flagarde) fixed the output of `meta()` for MSVC.
+273. [Giovanni Cerretani](https://github.com/gcerretani) fixed a check for `std::filesystem`.
+274. [Dimitris Apostolou](https://github.com/rex4539) fixed a typo.
+275. [Ferry Huberts](https://github.com/fhuberts) fixed a typo.
+276. [Michael Nosthoff](https://github.com/heinemml) fixed a typo.
+277. [JungHoon Lee](https://github.com/jhnlee) fixed a typo.
+278. [Faruk D.](https://github.com/fdiblen) fixed the CITATION.CFF file.
+279. [Andrea Cocito](https://github.com/puffetto) added a clarification on macro usage to the documentation.
+280. [Krzysiek Karbowiak](https://github.com/kkarbowiak) refactored the tests to use `CHECK_THROWS_WITH_AS`.
+281. [Chaoqi Zhang](https://github.com/prncoprs) fixed a typo.
+282. [ivanovmp](https://github.com/ivanovmp) fixed a whitespace error.
+283. [KsaNL](https://github.com/KsaNL) fixed a build error when including ``.
+284. [Andrea Pappacoda](https://github.com/Tachi107) moved `.pc` and `.cmake` files to `share` directory.
+285. [Wolf Vollprecht](https://github.com/wolfv) added the `patch_inplace` function.
+286. [Jake Zimmerman](https://github.com/jez) highlighted common usage patterns in the README file.
+287. [NN](https://github.com/NN---) added the Visual Studio output directory to `.gitignore`.
+288. [Romain Reignier](https://github.com/romainreignier) improved the performance the vector output adapter.
+289. [Mike](https://github.com/Mike-Leo-Smith) fixed the `std::iterator_traits`.
+290. [Richard Hozák](https://github.com/zxey) added macro `JSON_NO_ENUM` to disable default enum conversions.
+291. [vakokako](https://github.com/vakokako) fixed tests when compiling with C++20.
+292. [Alexander “weej” Jones](https://github.com/alexweej) fixed an example in the README.
+293. [Eli Schwartz](https://github.com/eli-schwartz) added more files to the `include.zip` archive.
+294. [Kevin Lu](https://github.com/kevinlul) fixed a compilation issue when typedefs with certain names were present.
+295. [Trevor Hickey](https://github.com/luxe) improved the description of an example.
+296. [Jef LeCompte](https://github.com/jef) updated the year in the README file.
+297. [Alexandre Hamez](https://github.com/ahamez) fixed a warning.
+298. [Maninderpal Badhan](https://github.com/mbadhan) fixed a typo.
+299. [kevin--](https://github.com/kevin--) added a note to an example in the README file.
+300. [I](https://github.com/wx257osn2) fixed a typo.
+301. [Gregorio Litenstein](https://github.com/Lord-Kamina) fixed the Clang detection.
+302. [Andreas Smas](https://github.com/andoma) added a Doozer badge.
+303. [WanCW](https://github.com/wancw) fixed the string conversion with Clang.
+304. [zhaohuaxishi](https://github.com/zhaohuaxishi) fixed a Doxygen error.
+305. [emvivre](https://github.com/emvivre) removed an invalid parameter from CMake.
+306. [Tobias Hermann](https://github.com/Dobiasd) fixed a link in the README file.
+307. [Michael](https://github.com/traits) fixed a warning.
+308. [Ryan Mulder](https://github.com/ryanjmulder) added `ensure_ascii` to the `dump` function.
+309. [Muri Nicanor](https://github.com/murinicanor) fixed the `sed` discovery in the Makefile.
+310. [David Avedissian](https://github.com/dgavedissian) implemented SFINAE-friendly `iterator_traits`.
+311. [AQNOUCH Mohammed](https://github.com/aqnouch) fixed a typo in the README.
+312. [Gareth Sylvester-Bradley](https://github.com/garethsb) added `operator/=` and `operator/` to construct JSON pointers.
+313. [Michael Macnair](https://github.com/mykter) added support for afl-fuzz testing.
+314. [Berkus Decker](https://github.com/berkus) fixed a typo in the README.
+315. [Illia Polishchuk](https://github.com/effolkronium) improved the CMake testing.
Thanks a lot for helping out! Please [let me know](mailto:mail@nlohmann.me) if I forgot someone.
diff --git a/docs/avatars.png b/docs/avatars.png
index 69e7da318..a21cadb9e 100644
Binary files a/docs/avatars.png and b/docs/avatars.png differ
diff --git a/docs/examples/json_pointer__operator__equal.cpp b/docs/examples/json_pointer__operator__equal.cpp
new file mode 100644
index 000000000..dce6df03c
--- /dev/null
+++ b/docs/examples/json_pointer__operator__equal.cpp
@@ -0,0 +1,19 @@
+#include
+#include
+
+using json = nlohmann::json;
+
+int main()
+{
+ // different JSON pointers
+ json::json_pointer ptr0;
+ json::json_pointer ptr1("");
+ json::json_pointer ptr2("/foo");
+
+ // compare JSON pointers
+ std::cout << std::boolalpha
+ << "\"" << ptr0 << "\" == \"" << ptr0 << "\": " << (ptr0 == ptr0) << '\n'
+ << "\"" << ptr0 << "\" == \"" << ptr1 << "\": " << (ptr0 == ptr1) << '\n'
+ << "\"" << ptr1 << "\" == \"" << ptr2 << "\": " << (ptr1 == ptr2) << '\n'
+ << "\"" << ptr2 << "\" == \"" << ptr2 << "\": " << (ptr2 == ptr2) << std::endl;
+}
diff --git a/docs/examples/json_pointer__operator__equal.output b/docs/examples/json_pointer__operator__equal.output
new file mode 100644
index 000000000..9a7612580
--- /dev/null
+++ b/docs/examples/json_pointer__operator__equal.output
@@ -0,0 +1,4 @@
+"" == "": true
+"" == "": true
+"" == "/foo": false
+"/foo" == "/foo": true
diff --git a/docs/examples/json_pointer__operator__equal_stringtype.cpp b/docs/examples/json_pointer__operator__equal_stringtype.cpp
new file mode 100644
index 000000000..af8ec5a29
--- /dev/null
+++ b/docs/examples/json_pointer__operator__equal_stringtype.cpp
@@ -0,0 +1,33 @@
+#include
+#include
+#include
+
+using json = nlohmann::json;
+
+int main()
+{
+ // different JSON pointers
+ json::json_pointer ptr0;
+ json::json_pointer ptr1("");
+ json::json_pointer ptr2("/foo");
+
+ // different strings
+ std::string str0("");
+ std::string str1("/foo");
+ std::string str2("bar");
+
+ // compare JSON pointers and strings
+ std::cout << std::boolalpha
+ << "\"" << ptr0 << "\" == \"" << str0 << "\": " << (ptr0 == str0) << '\n'
+ << "\"" << str0 << "\" == \"" << ptr1 << "\": " << (str0 == ptr1) << '\n'
+ << "\"" << ptr2 << "\" == \"" << str1 << "\": " << (ptr2 == str1) << std::endl;
+
+ try
+ {
+ std::cout << "\"" << str2 << "\" == \"" << ptr2 << "\": " << (str2 == ptr2) << std::endl;
+ }
+ catch (const json::parse_error& ex)
+ {
+ std::cout << ex.what() << std::endl;
+ }
+}
diff --git a/docs/examples/json_pointer__operator__equal_stringtype.output b/docs/examples/json_pointer__operator__equal_stringtype.output
new file mode 100644
index 000000000..7fb299d3d
--- /dev/null
+++ b/docs/examples/json_pointer__operator__equal_stringtype.output
@@ -0,0 +1,4 @@
+"" == "": true
+"" == "": true
+"/foo" == "/foo": true
+"bar" == "/foo": [json.exception.parse_error.107] parse error at byte 1: JSON pointer must be empty or begin with '/' - was: 'bar'
diff --git a/docs/examples/json_pointer__operator__notequal.cpp b/docs/examples/json_pointer__operator__notequal.cpp
new file mode 100644
index 000000000..9bbdd5310
--- /dev/null
+++ b/docs/examples/json_pointer__operator__notequal.cpp
@@ -0,0 +1,19 @@
+#include
+#include
+
+using json = nlohmann::json;
+
+int main()
+{
+ // different JSON pointers
+ json::json_pointer ptr0;
+ json::json_pointer ptr1("");
+ json::json_pointer ptr2("/foo");
+
+ // compare JSON pointers
+ std::cout << std::boolalpha
+ << "\"" << ptr0 << "\" != \"" << ptr0 << "\": " << (ptr0 != ptr0) << '\n'
+ << "\"" << ptr0 << "\" != \"" << ptr1 << "\": " << (ptr0 != ptr1) << '\n'
+ << "\"" << ptr1 << "\" != \"" << ptr2 << "\": " << (ptr1 != ptr2) << '\n'
+ << "\"" << ptr2 << "\" != \"" << ptr2 << "\": " << (ptr2 != ptr2) << std::endl;
+}
diff --git a/docs/examples/json_pointer__operator__notequal.output b/docs/examples/json_pointer__operator__notequal.output
new file mode 100644
index 000000000..de891f0c6
--- /dev/null
+++ b/docs/examples/json_pointer__operator__notequal.output
@@ -0,0 +1,4 @@
+"" != "": false
+"" != "": false
+"" != "/foo": true
+"/foo" != "/foo": false
diff --git a/docs/examples/json_pointer__operator__notequal_stringtype.cpp b/docs/examples/json_pointer__operator__notequal_stringtype.cpp
new file mode 100644
index 000000000..b9b898728
--- /dev/null
+++ b/docs/examples/json_pointer__operator__notequal_stringtype.cpp
@@ -0,0 +1,32 @@
+#include
+#include
+
+using json = nlohmann::json;
+
+int main()
+{
+ // different JSON pointers
+ json::json_pointer ptr0;
+ json::json_pointer ptr1("");
+ json::json_pointer ptr2("/foo");
+
+ // different strings
+ std::string str0("");
+ std::string str1("/foo");
+ std::string str2("bar");
+
+ // compare JSON pointers and strings
+ std::cout << std::boolalpha
+ << "\"" << ptr0 << "\" != \"" << str0 << "\": " << (ptr0 != str0) << '\n'
+ << "\"" << str0 << "\" != \"" << ptr1 << "\": " << (str0 != ptr1) << '\n'
+ << "\"" << ptr2 << "\" != \"" << str1 << "\": " << (ptr2 != str1) << std::endl;
+
+ try
+ {
+ std::cout << "\"" << str2 << "\" != \"" << ptr2 << "\": " << (str2 != ptr2) << std::endl;
+ }
+ catch (const json::parse_error& ex)
+ {
+ std::cout << ex.what() << std::endl;
+ }
+}
diff --git a/docs/examples/json_pointer__operator__notequal_stringtype.output b/docs/examples/json_pointer__operator__notequal_stringtype.output
new file mode 100644
index 000000000..61331b752
--- /dev/null
+++ b/docs/examples/json_pointer__operator__notequal_stringtype.output
@@ -0,0 +1,4 @@
+"" != "": false
+"" != "": false
+"/foo" != "/foo": false
+"bar" != "/foo": [json.exception.parse_error.107] parse error at byte 1: JSON pointer must be empty or begin with '/' - was: 'bar'
diff --git a/docs/mkdocs/docs/api/json_pointer/index.md b/docs/mkdocs/docs/api/json_pointer/index.md
index 75b536c1c..22e246405 100644
--- a/docs/mkdocs/docs/api/json_pointer/index.md
+++ b/docs/mkdocs/docs/api/json_pointer/index.md
@@ -29,6 +29,8 @@ are the base for JSON patches.
- [(constructor)](json_pointer.md)
- [**to_string**](to_string.md) - return a string representation of the JSON pointer
- [**operator string_t**](operator_string_t.md) - return a string representation of the JSON pointer
+- [**operator==**](operator_eq.md) - compare: equal
+- [**operator!=**](operator_ne.md) - compare: not equal
- [**operator/=**](operator_slasheq.md) - append to the end of the JSON pointer
- [**operator/**](operator_slash.md) - create JSON Pointer by appending
- [**parent_pointer**](parent_pointer.md) - returns the parent of this JSON pointer
diff --git a/docs/mkdocs/docs/api/json_pointer/operator_eq.md b/docs/mkdocs/docs/api/json_pointer/operator_eq.md
new file mode 100644
index 000000000..a877f4b2a
--- /dev/null
+++ b/docs/mkdocs/docs/api/json_pointer/operator_eq.md
@@ -0,0 +1,107 @@
+# nlohmann::json_pointer::operator==
+
+```cpp
+// until C++20
+template
+bool operator==(
+ const json_pointer& lhs,
+ const json_pointer& rhs) noexcept; // (1)
+
+template
+bool operator==(
+ const json_pointer& lhs,
+ const StringType& rhs); // (2)
+
+template
+bool operator==(
+ const StringType& lhs,
+ const json_pointer& rhs); // (2)
+
+// since C++20
+class json_pointer {
+ template
+ bool operator==(
+ const json_pointer& rhs) const noexcept; // (1)
+
+ bool operator==(const string_t& rhs) const; // (2)
+};
+```
+
+1. Compares two JSON pointers for equality by comparing their reference tokens.
+
+2. Compares a JSON pointer and a string or a string and a JSON pointer for equality by converting the string to a JSON
+ pointer and comparing the JSON pointers according to 1.
+
+## Template parameters
+
+`RefStringTypeLhs`, `RefStringTypeRhs`
+: the string type of the left-hand side or right-hand side JSON pointer, respectively
+
+`StringType`
+: the string type derived from the `json_pointer` operand ([`json_pointer::string_t`](string_t.md))
+
+## Parameters
+
+`lhs` (in)
+: first value to consider
+
+`rhs` (in)
+: second value to consider
+
+## Return value
+
+whether the values `lhs`/`*this` and `rhs` are equal
+
+## Exception safety
+
+1. No-throw guarantee: this function never throws exceptions.
+2. Strong exception safety: if an exception occurs, the original value stays intact.
+
+## Exceptions
+
+1. (none)
+2. The function can throw the following exceptions:
+ - Throws [parse_error.107](../../home/exceptions.md#jsonexceptionparse_error107) if the given JSON pointer `s` is
+ nonempty and does not begin with a slash (`/`); see example below.
+ - Throws [parse_error.108](../../home/exceptions.md#jsonexceptionparse_error108) if a tilde (`~`) in the given JSON
+ pointer `s` is not followed by `0` (representing `~`) or `1` (representing `/`); see example below.
+
+## Complexity
+
+Constant if `lhs` and `rhs` differ in the number of reference tokens, otherwise linear in the number of reference
+tokens.
+
+## Examples
+
+??? example "Example: (1) Comparing JSON pointers"
+
+ The example demonstrates comparing JSON pointers.
+
+ ```cpp
+ --8<-- "examples/json_pointer__operator__equal.cpp"
+ ```
+
+ Output:
+
+ ```
+ --8<-- "examples/json_pointer__operator__equal.output"
+ ```
+
+??? example "Example: (2) Comparing JSON pointers and strings"
+
+ The example demonstrates comparing JSON pointers and strings, and when doing so may raise an exception.
+
+ ```cpp
+ --8<-- "examples/json_pointer__operator__equal_stringtype.cpp"
+ ```
+
+ Output:
+
+ ```
+ --8<-- "examples/json_pointer__operator__equal_stringtype.output"
+ ```
+
+## Version history
+
+1. Added in version 2.1.0. Added C++20 member functions in version 3.11.2.
+2. Added in version 3.11.2.
diff --git a/docs/mkdocs/docs/api/json_pointer/operator_ne.md b/docs/mkdocs/docs/api/json_pointer/operator_ne.md
new file mode 100644
index 000000000..05b09ce45
--- /dev/null
+++ b/docs/mkdocs/docs/api/json_pointer/operator_ne.md
@@ -0,0 +1,105 @@
+# nlohmann::json_pointer::operator!=
+
+```cpp
+// until C++20
+template
+bool operator!=(
+ const json_pointer& lhs,
+ const json_pointer& rhs) noexcept; // (1)
+
+template
+bool operator!=(
+ const json_pointer& lhs,
+ const StringType& rhs); // (2)
+
+template
+bool operator!=(
+ const StringType& lhs,
+ const json_pointer& rhs); // (2)
+```
+
+1. Compares two JSON pointers for inequality by comparing their reference tokens.
+
+2. Compares a JSON pointer and a string or a string and a JSON pointer for inequality by converting the string to a
+ JSON pointer and comparing the JSON pointers according to 1.
+
+## Template parameters
+
+`RefStringTypeLhs`, `RefStringTypeRhs`
+: the string type of the left-hand side or right-hand side JSON pointer, respectively
+
+`StringType`
+: the string type derived from the `json_pointer` operand ([`json_pointer::string_t`](string_t.md))
+
+## Parameters
+
+`lhs` (in)
+: first value to consider
+
+`rhs` (in)
+: second value to consider
+
+## Return value
+
+whether the values `lhs`/`*this` and `rhs` are not equal
+
+## Exception safety
+
+1. No-throw guarantee: this function never throws exceptions.
+2. Strong exception safety: if an exception occurs, the original value stays intact.
+
+## Exceptions
+
+1. (none)
+2. The function can throw the following exceptions:
+ - Throws [parse_error.107](../../home/exceptions.md#jsonexceptionparse_error107) if the given JSON pointer `s` is
+ nonempty and does not begin with a slash (`/`); see example below.
+ - Throws [parse_error.108](../../home/exceptions.md#jsonexceptionparse_error108) if a tilde (`~`) in the given JSON
+ pointer `s` is not followed by `0` (representing `~`) or `1` (representing `/`); see example below.
+
+## Complexity
+
+Constant if `lhs` and `rhs` differ in the number of reference tokens, otherwise linear in the number of reference
+tokens.
+
+## Notes
+
+!!! note "Operator overload resolution"
+
+ Since C++20 overload resolution will consider the _rewritten candidate_ generated from
+ [`operator==`](operator_eq.md).
+
+## Examples
+
+??? example "Example: (1) Comparing JSON pointers"
+
+ The example demonstrates comparing JSON pointers.
+
+ ```cpp
+ --8<-- "examples/json_pointer__operator__notequal.cpp"
+ ```
+
+ Output:
+
+ ```
+ --8<-- "examples/json_pointer__operator__notequal.output"
+ ```
+
+??? example "Example: (2) Comparing JSON pointers and strings"
+
+ The example demonstrates comparing JSON pointers and strings, and when doing so may raise an exception.
+
+ ```cpp
+ --8<-- "examples/json_pointer__operator__notequal_stringtype.cpp"
+ ```
+
+ Output:
+
+ ```
+ --8<-- "examples/json_pointer__operator__notequal_stringtype.output"
+ ```
+
+## Version history
+
+1. Added in version 2.1.0.
+2. Added in version 3.11.2.
diff --git a/docs/mkdocs/mkdocs.yml b/docs/mkdocs/mkdocs.yml
index 65182adbf..f88784f3e 100644
--- a/docs/mkdocs/mkdocs.yml
+++ b/docs/mkdocs/mkdocs.yml
@@ -209,6 +209,8 @@ nav:
- 'back': api/json_pointer/back.md
- 'empty': api/json_pointer/empty.md
- 'operator string_t': api/json_pointer/operator_string_t.md
+ - 'operator==': api/json_pointer/operator_eq.md
+ - 'operator!=': api/json_pointer/operator_ne.md
- 'operator/': api/json_pointer/operator_slash.md
- 'operator/=': api/json_pointer/operator_slasheq.md
- 'parent_pointer': api/json_pointer/parent_pointer.md
diff --git a/include/nlohmann/detail/json_pointer.hpp b/include/nlohmann/detail/json_pointer.hpp
index 5b7632676..28de45028 100644
--- a/include/nlohmann/detail/json_pointer.hpp
+++ b/include/nlohmann/detail/json_pointer.hpp
@@ -846,55 +846,118 @@ class json_pointer
return result;
}
- /*!
- @brief compares two JSON pointers for equality
+ public:
+#ifdef JSON_HAS_CPP_20
+ /// @brief compares two JSON pointers for equality
+ /// @sa https://json.nlohmann.me/api/json_pointer/operator_eq/
+ template
+ bool operator==(const json_pointer& rhs) const noexcept
+ {
+ return reference_tokens == rhs.reference_tokens;
+ }
- @param[in] lhs JSON pointer to compare
- @param[in] rhs JSON pointer to compare
- @return whether @a lhs is equal to @a rhs
-
- @complexity Linear in the length of the JSON pointer
-
- @exceptionsafety No-throw guarantee: this function never throws exceptions.
- */
+ /// @brief compares JSON pointer and string for equality
+ /// @sa https://json.nlohmann.me/api/json_pointer/operator_eq/
+ bool operator==(const string_t& rhs) const
+ {
+ return *this == json_pointer(rhs);
+ }
+#else
+ /// @brief compares two JSON pointers for equality
+ /// @sa https://json.nlohmann.me/api/json_pointer/operator_eq/
template
// NOLINTNEXTLINE(readability-redundant-declaration)
- friend bool operator==(json_pointer const& lhs,
- json_pointer const& rhs) noexcept;
+ friend bool operator==(const json_pointer& lhs,
+ const json_pointer& rhs) noexcept;
- /*!
- @brief compares two JSON pointers for inequality
+ /// @brief compares JSON pointer and string for equality
+ /// @sa https://json.nlohmann.me/api/json_pointer/operator_eq/
+ template
+ // NOLINTNEXTLINE(readability-redundant-declaration)
+ friend bool operator==(const json_pointer& lhs,
+ const StringType& rhs);
- @param[in] lhs JSON pointer to compare
- @param[in] rhs JSON pointer to compare
- @return whether @a lhs is not equal @a rhs
+ /// @brief compares string and JSON pointer for equality
+ /// @sa https://json.nlohmann.me/api/json_pointer/operator_eq/
+ template
+ // NOLINTNEXTLINE(readability-redundant-declaration)
+ friend bool operator==(const StringType& lhs,
+ const json_pointer& rhs);
- @complexity Linear in the length of the JSON pointer
-
- @exceptionsafety No-throw guarantee: this function never throws exceptions.
- */
+ /// @brief compares two JSON pointers for inequality
+ /// @sa https://json.nlohmann.me/api/json_pointer/operator_ne/
template
// NOLINTNEXTLINE(readability-redundant-declaration)
- friend bool operator!=(json_pointer const& lhs,
- json_pointer const& rhs) noexcept;
+ friend bool operator!=(const json_pointer& lhs,
+ const json_pointer& rhs) noexcept;
+ /// @brief compares JSON pointer and string for inequality
+ /// @sa https://json.nlohmann.me/api/json_pointer/operator_ne/
+ template
+ // NOLINTNEXTLINE(readability-redundant-declaration)
+ friend bool operator!=(const json_pointer& lhs,
+ const StringType& rhs);
+
+ /// @brief compares string and JSON pointer for inequality
+ /// @sa https://json.nlohmann.me/api/json_pointer/operator_ne/
+ template
+ // NOLINTNEXTLINE(readability-redundant-declaration)
+ friend bool operator!=(const StringType& lhs,
+ const json_pointer& rhs);
+#endif
+
+ private:
/// the reference tokens
std::vector reference_tokens;
};
+#ifndef JSON_HAS_CPP_20
// functions cannot be defined inside class due to ODR violations
template
-inline bool operator==(json_pointer const& lhs,
- json_pointer const& rhs) noexcept
+inline bool operator==(const json_pointer& lhs,
+ const json_pointer& rhs) noexcept
{
return lhs.reference_tokens == rhs.reference_tokens;
}
+template::string_t>
+inline bool operator==(const json_pointer& lhs,
+ const StringType& rhs)
+{
+ return lhs == json_pointer(rhs);
+}
+
+template::string_t>
+inline bool operator==(const StringType& lhs,
+ const json_pointer& rhs)
+{
+ return json_pointer(lhs) == rhs;
+}
+
template
-inline bool operator!=(json_pointer const& lhs,
- json_pointer const& rhs) noexcept
+inline bool operator!=(const json_pointer& lhs,
+ const json_pointer& rhs) noexcept
{
return !(lhs == rhs);
}
+template::string_t>
+inline bool operator!=(const json_pointer& lhs,
+ const StringType& rhs)
+{
+ return !(lhs == rhs);
+}
+
+template::string_t>
+inline bool operator!=(const StringType& lhs,
+ const json_pointer& rhs)
+{
+ return !(lhs == rhs);
+}
+#endif
+
NLOHMANN_JSON_NAMESPACE_END
diff --git a/include/nlohmann/json_fwd.hpp b/include/nlohmann/json_fwd.hpp
index c7ad23660..be197359c 100644
--- a/include/nlohmann/json_fwd.hpp
+++ b/include/nlohmann/json_fwd.hpp
@@ -51,7 +51,7 @@ class basic_json;
/// @brief JSON Pointer defines a string syntax for identifying a specific value within a JSON document
/// @sa https://json.nlohmann.me/api/json_pointer/
-template
+template
class json_pointer;
/*!
diff --git a/single_include/nlohmann/json.hpp b/single_include/nlohmann/json.hpp
index 4d86493e1..beee0136c 100644
--- a/single_include/nlohmann/json.hpp
+++ b/single_include/nlohmann/json.hpp
@@ -3373,7 +3373,7 @@ NLOHMANN_JSON_NAMESPACE_END
/// @brief JSON Pointer defines a string syntax for identifying a specific value within a JSON document
/// @sa https://json.nlohmann.me/api/json_pointer/
- template
+ template
class json_pointer;
/*!
@@ -14448,57 +14448,120 @@ class json_pointer
return result;
}
- /*!
- @brief compares two JSON pointers for equality
+ public:
+#ifdef JSON_HAS_CPP_20
+ /// @brief compares two JSON pointers for equality
+ /// @sa https://json.nlohmann.me/api/json_pointer/operator_eq/
+ template
+ bool operator==(const json_pointer& rhs) const noexcept
+ {
+ return reference_tokens == rhs.reference_tokens;
+ }
- @param[in] lhs JSON pointer to compare
- @param[in] rhs JSON pointer to compare
- @return whether @a lhs is equal to @a rhs
-
- @complexity Linear in the length of the JSON pointer
-
- @exceptionsafety No-throw guarantee: this function never throws exceptions.
- */
+ /// @brief compares JSON pointer and string for equality
+ /// @sa https://json.nlohmann.me/api/json_pointer/operator_eq/
+ bool operator==(const string_t& rhs) const
+ {
+ return *this == json_pointer(rhs);
+ }
+#else
+ /// @brief compares two JSON pointers for equality
+ /// @sa https://json.nlohmann.me/api/json_pointer/operator_eq/
template
// NOLINTNEXTLINE(readability-redundant-declaration)
- friend bool operator==(json_pointer const& lhs,
- json_pointer const& rhs) noexcept;
+ friend bool operator==(const json_pointer& lhs,
+ const json_pointer& rhs) noexcept;
- /*!
- @brief compares two JSON pointers for inequality
+ /// @brief compares JSON pointer and string for equality
+ /// @sa https://json.nlohmann.me/api/json_pointer/operator_eq/
+ template
+ // NOLINTNEXTLINE(readability-redundant-declaration)
+ friend bool operator==(const json_pointer& lhs,
+ const StringType& rhs);
- @param[in] lhs JSON pointer to compare
- @param[in] rhs JSON pointer to compare
- @return whether @a lhs is not equal @a rhs
+ /// @brief compares string and JSON pointer for equality
+ /// @sa https://json.nlohmann.me/api/json_pointer/operator_eq/
+ template
+ // NOLINTNEXTLINE(readability-redundant-declaration)
+ friend bool operator==(const StringType& lhs,
+ const json_pointer& rhs);
- @complexity Linear in the length of the JSON pointer
-
- @exceptionsafety No-throw guarantee: this function never throws exceptions.
- */
+ /// @brief compares two JSON pointers for inequality
+ /// @sa https://json.nlohmann.me/api/json_pointer/operator_ne/
template
// NOLINTNEXTLINE(readability-redundant-declaration)
- friend bool operator!=(json_pointer const& lhs,
- json_pointer const& rhs) noexcept;
+ friend bool operator!=(const json_pointer& lhs,
+ const json_pointer& rhs) noexcept;
+ /// @brief compares JSON pointer and string for inequality
+ /// @sa https://json.nlohmann.me/api/json_pointer/operator_ne/
+ template
+ // NOLINTNEXTLINE(readability-redundant-declaration)
+ friend bool operator!=(const json_pointer& lhs,
+ const StringType& rhs);
+
+ /// @brief compares string and JSON pointer for inequality
+ /// @sa https://json.nlohmann.me/api/json_pointer/operator_ne/
+ template
+ // NOLINTNEXTLINE(readability-redundant-declaration)
+ friend bool operator!=(const StringType& lhs,
+ const json_pointer& rhs);
+#endif
+
+ private:
/// the reference tokens
std::vector reference_tokens;
};
+#ifndef JSON_HAS_CPP_20
// functions cannot be defined inside class due to ODR violations
template
-inline bool operator==(json_pointer const& lhs,
- json_pointer const& rhs) noexcept
+inline bool operator==(const json_pointer& lhs,
+ const json_pointer& rhs) noexcept
{
return lhs.reference_tokens == rhs.reference_tokens;
}
+template::string_t>
+inline bool operator==(const json_pointer& lhs,
+ const StringType& rhs)
+{
+ return lhs == json_pointer(rhs);
+}
+
+template::string_t>
+inline bool operator==(const StringType& lhs,
+ const json_pointer& rhs)
+{
+ return json_pointer(lhs) == rhs;
+}
+
template
-inline bool operator!=(json_pointer const& lhs,
- json_pointer const& rhs) noexcept
+inline bool operator!=(const json_pointer& lhs,
+ const json_pointer& rhs) noexcept
{
return !(lhs == rhs);
}
+template::string_t>
+inline bool operator!=(const json_pointer& lhs,
+ const StringType& rhs)
+{
+ return !(lhs == rhs);
+}
+
+template::string_t>
+inline bool operator!=(const StringType& lhs,
+ const json_pointer& rhs)
+{
+ return !(lhs == rhs);
+}
+#endif
+
NLOHMANN_JSON_NAMESPACE_END
// #include
diff --git a/tests/src/unit-json_pointer.cpp b/tests/src/unit-json_pointer.cpp
index 93559eb31..f6e2b00c0 100644
--- a/tests/src/unit-json_pointer.cpp
+++ b/tests/src/unit-json_pointer.cpp
@@ -651,11 +651,50 @@ TEST_CASE("JSON pointers")
SECTION("equality comparison")
{
- auto ptr1 = json::json_pointer("/foo/bar");
- auto ptr2 = json::json_pointer("/foo/bar");
+ const char* ptr_cpstring = "/foo/bar";
+ const char ptr_castring[] = "/foo/bar"; // NOLINT(hicpp-avoid-c-arrays,modernize-avoid-c-arrays,cppcoreguidelines-avoid-c-arrays)
+ std::string ptr_string{"/foo/bar"};
+ auto ptr1 = json::json_pointer(ptr_string);
+ auto ptr2 = json::json_pointer(ptr_string);
+
+ // build with C++20 to test rewritten candidates
+ // JSON_HAS_CPP_20
CHECK(ptr1 == ptr2);
+
+ CHECK(ptr1 == "/foo/bar");
+ CHECK(ptr1 == ptr_cpstring);
+ CHECK(ptr1 == ptr_castring);
+ CHECK(ptr1 == ptr_string);
+
+ CHECK("/foo/bar" == ptr1);
+ CHECK(ptr_cpstring == ptr1);
+ CHECK(ptr_castring == ptr1);
+ CHECK(ptr_string == ptr1);
+
CHECK_FALSE(ptr1 != ptr2);
+
+ CHECK_FALSE(ptr1 != "/foo/bar");
+ CHECK_FALSE(ptr1 != ptr_cpstring);
+ CHECK_FALSE(ptr1 != ptr_castring);
+ CHECK_FALSE(ptr1 != ptr_string);
+
+ CHECK_FALSE("/foo/bar" != ptr1);
+ CHECK_FALSE(ptr_cpstring != ptr1);
+ CHECK_FALSE(ptr_castring != ptr1);
+ CHECK_FALSE(ptr_string != ptr1);
+
+ SECTION("exceptions")
+ {
+ CHECK_THROWS_WITH_AS(ptr1 == "foo",
+ "[json.exception.parse_error.107] parse error at byte 1: JSON pointer must be empty or begin with '/' - was: 'foo'", json::parse_error&);
+ CHECK_THROWS_WITH_AS("foo" == ptr1,
+ "[json.exception.parse_error.107] parse error at byte 1: JSON pointer must be empty or begin with '/' - was: 'foo'", json::parse_error&);
+ CHECK_THROWS_WITH_AS(ptr1 == "/~~",
+ "[json.exception.parse_error.108] parse error: escape character '~' must be followed with '0' or '1'", json::parse_error&);
+ CHECK_THROWS_WITH_AS("/~~" == ptr1,
+ "[json.exception.parse_error.108] parse error: escape character '~' must be followed with '0' or '1'", json::parse_error&);
+ }
}
SECTION("backwards compatibility and mixing")
@@ -676,9 +715,10 @@ TEST_CASE("JSON pointers")
CHECK(std::is_same::value);
CHECK(std::is_same::value);
- json_ptr_str ptr{"/foo/0"};
- json_ptr_j ptr_j{"/foo/0"};
- json_ptr_oj ptr_oj{"/foo/0"};
+ std::string ptr_string{"/foo/0"};
+ json_ptr_str ptr{ptr_string};
+ json_ptr_j ptr_j{ptr_string};
+ json_ptr_oj ptr_oj{ptr_string};
CHECK(j.contains(ptr));
CHECK(j.contains(ptr_j));
@@ -697,5 +737,25 @@ TEST_CASE("JSON pointers")
CHECK(ptr == ptr_oj);
CHECK_FALSE(ptr != ptr_j);
CHECK_FALSE(ptr != ptr_oj);
+
+ SECTION("equality comparison")
+ {
+ // build with C++20 to test rewritten candidates
+ // JSON_HAS_CPP_20
+
+ CHECK(ptr == ptr_j);
+ CHECK(ptr == ptr_oj);
+ CHECK(ptr_j == ptr);
+ CHECK(ptr_j == ptr_oj);
+ CHECK(ptr_oj == ptr_j);
+ CHECK(ptr_oj == ptr);
+
+ CHECK_FALSE(ptr != ptr_j);
+ CHECK_FALSE(ptr != ptr_oj);
+ CHECK_FALSE(ptr_j != ptr);
+ CHECK_FALSE(ptr_j != ptr_oj);
+ CHECK_FALSE(ptr_oj != ptr_j);
+ CHECK_FALSE(ptr_oj != ptr);
+ }
}
}