Commit f28fc22 introduced const qualifiers on post-(inc-/dec-)rement
operators of iterators. These qualifiers prevent the use of basic_json
in place of std::ranges::range, which requires the post-increment
operator to be equality-preserving.
These changes appear to be the result of ICC compiler suggestions, and
no further explanation is discernible from the PR discussion (#858).
Further testing revealed, that clang-tidy also suggests adding const to
prevent "accidental mutation of a temporary object".
As an alternative, this commit partially reverts f28fc22, removing all
added const qualifiers from return types and adds lvalue reference
qualifiers to the operator member functions instead.
Unit tests ensure the operators remain equality-preserving and
accidental mutation of temporaries following post-(inc-/dec-)rement is
prohibited.
Fixes#3331.
* 🔧 use proper GCC binary
* 🔧 add more GCC warning flags
* ⚗️ try fix from https://github.com/nlohmann/json/issues/3138#issuecomment-1015562666
* Fix custom allocator test build failures (C++20)
Allocator tests fail to compile in C++20 mode with clang+MS STL due
to missing copy constructors.
* Fix test build failures due to missing noexcept (gcc-12)
* alt_string has multiple member functions that should be marked noexcept.
* nlohmann::ordered_map constructors can be noexcept.
Compilation failures result from the warning flag -Werror=noexcept and
gcc-12.
* Disable broken comparison tests in C++20 mode
Co-authored-by: Niels Lohmann <mail@nlohmann.me>
One of the ordered_map constructors was incorrectly accepting a
std::initializer_list<T> instead of std::initializer_list<value_type>.
Add regression test.
Fixes#3343.
* Added new macros NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT and NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT.
* Updated docs for NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT and NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT accordingly
* Rephrased docs for NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT and NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT
* Updated docs for NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT and NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT
* Renamed default_obj in to avoid name clashes
* Added test for serialization of default constructed object
* Add const to getters for macro tests
Co-authored-by: Chaoya Li <harry75369@gmail.com>
* meta: rework is_compatible/is_constructible_string_type
These type traits performed an incorrect and insufficient check.
Converting to a std::filesystem::path used to work by accident thanks to
these brittle constraints, but the clean-up performed in #3020 broke them.
* support std::filesystem::path
Fixes#3070
The previous version relied on the existence of an 'iterator' type.
As mentioned in comments, this is not the proper way to do it and
causes issues with certain types (e.g. views from range-v3).
Add a 'is_range' trait that properly detects the return type of
'begin'/'end', and use it in instead.
* Set parent pointers for values inserted via update() (fixes#3007).
* Moved test for #3007 to proper file.
* Enable access to private members in diagnostics unit tests.
* Make style consistent with rest of code.
* Forced amalgamate rerun.
* Refactor test for #3007 so it doesn't use private members. Also extend to test both update() functions.
* Added fix for #3007 to update(const_iterator, const_iterator) as well.
* Added failing example code from #3007 as extra test.