Commit Graph

774 Commits

Author SHA1 Message Date
Florian Albrechtskirchinger
c2054b96b9
Restore disabled check for #3070 (except on MSVC) (#3421)
Restore the previously disabled check for regression #3070 on all
compilers but MSVC.

To summarize the issue:
Given namespace fs = std::filesystem.
On MSVC attempting to construct an fs::path from json results in an
ambiguous overload resolution because fs::path can be constructed from
both a std::string as well as another fs::path.
To the best of my knowledge there is no way to fix an ambiguous overload
situation involving a type we do not control and with json implicitly
converting to both std::string and fs::path.

Re-enabling the check where it compiles and keeping it disabled for MSVC
is the best we can do.

Closes #3377 and #3382.
2022-04-06 08:25:35 +02:00
flagarde
ab5cecb34f
Report the right __cplusplus value for MSVC in basic_json meta() (#3417)
* Report the right __cplusplus value for MSVC in basic_json meta()

* Run amalgamate
2022-04-04 20:45:19 +02:00
DarkZeros
6121dbbe02
Avoid clash with Arduino defines (#3338)
* Avoid clash with Arduino defines

* Arduino defines B0/B1 in "binary.h"
     #define B0 0
     #define B1 1
  This clashes with names of the template
  variables in conjuction

* Renaming them to "B" rather than "B1"
  Now it can be used as-is in Arduino projects

* Apply suggestions from code review

* Apply suggestions from code review

Co-authored-by: Daniel Ansorregui <d.ansorregui@samsung.com>
Co-authored-by: Niels Lohmann <niels.lohmann@gmail.com>
2022-04-03 18:33:33 +02:00
Florian Albrechtskirchinger
ad103e5b45
Improve unit testing (Part 1) (#3380)
* Refactor unit test creation

Add functions for creating tests and to supply test- and
standard-specific build settings.

Raises minimum CMake version to 3.13 in test directory.

json_test_add_test_for(
    <file>
    MAIN <main>
    [CXX_STANDARDS <version_number>...] [FORCE])

Given a <file> unit-foo.cpp, produces

    test-foo_cpp<version_number>

if C++ standard <version_number> is supported by the compiler and
thesource file contains JSON_HAS_CPP_<version_number>.  Use FORCE to
create the test regardless of the file containing
JSON_HAS_CPP_<version_number>.  Test targets are linked against <main>.
CXX_STANDARDS defaults to "11".

json_test_set_test_options(
    all|<tests>
    [CXX_STANDARDS all|<args>...]
    [COMPILE_DEFINITIONS <args>...]
    [COMPILE_FEATURES <args>...]
    [COMPILE_OPTIONS <args>...]
    [LINK_LIBRARIES <args>...]
    [LINK_OPTIONS <args>...])

Supply test- and standard-specific build settings.
Specify multiple tests using a list e.g., "test-foo;test-bar".

Must be called BEFORE the test is created.

* Use CMAKE_MODULE_PATH

* Don't undef some macros if JSON_TEST_KEEP_MACROS is defined

* Use JSON_TEST_KEEP_MACROS

Incidentally enables the regression tests for #2546 and #3070.

A CHECK_THROWS_WITH_AS in #3070 was disabled which is tracked in #3377
and a line in from_json(..., std_fs::path&) was marked with LCOV_EXCL_LINE.

* Add three-way comparison feature test macro

* Disable broken comparison if JSON_HAS_THREE_WAY_COMPARISON

* Fix redefinition of inline constexpr statics

Redelcaration of inline constexpr static data members in namespace scope
was deprecated in C++17. Fixes -Werror=deprecated compilation failures.

* Fix more test build failures due to missing noexcept

* CI: update cmake_flags test to use CMake 3.13 in test directory

Also change default for JSON_BuildTests option to depend on CMake
version.

* CI: turn *_CXXFLAGS into CMake lists

* CI: use JSON_TestStandards to set CXX_STANDARD

* CI: pass extra CXXFLAGS to standards tests
2022-03-24 07:54:07 +01:00
Florian Albrechtskirchinger
700b95f447
Make iterator operator++/--(int) equality-preserving (#3332)
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.
2022-03-08 10:10:50 +01:00
Florian Albrechtskirchinger
f208a9c19b
Fix C++20/gcc-12 issues (Part 1) (#3379)
* 🔧 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>
2022-03-07 22:19:28 +01:00
Florian Albrechtskirchinger
0fd95d2e28
Fix ordered_map ctor with initializer_list (#3370)
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.
2022-03-07 13:41:35 +01:00
pketelsen
eec79d4e8a
Add macros NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT and ..._NON_INTRUSIVE_WITH_DEFAULT (#3143)
* 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>
2022-01-30 22:06:50 +01:00
Niels Lohmann
6d8d043add
♻️ make function static 2022-01-05 21:21:46 +01:00
Niels Lohmann
9e89c2fdb5
♻️ remove stringstream (#3244) 2022-01-04 09:25:41 +01:00
Giovanni Cerretani
78ddf2bcf8
fix _MSC_VER version to check for std::filesystem (#3240) 2022-01-03 13:57:51 +01:00
Niels Lohmann
b5364faf9d
🔖 set version to 3.10.5 2022-01-02 22:35:35 +01:00
Niels Lohmann
b69713c394
Fix compilation error with NVCC (#3234) 2022-01-02 09:03:56 +01:00
Niels Lohmann
1aca6cb949
Add build step for NVCC and fix a warning (#3227)
* 👷 add step for NVCC build #2676
* 🚨 fix warning (code taken from #2736)
* 👷 use version 2.2.0 of the CI image
2021-12-30 13:40:15 +01:00
Niels Lohmann
29cd970b94
Consolidate documentation (#3071)
* 🔥 consolidate documentation
* ♻️ overwork std specializations
* 🚚 move images files to mkdocs
* ♻️ fix URLs
* 🔧 tweak MkDocs configuration
* 🔧 add namespaces
* 📝 document deprecations
* 📝 document documentation generation
* 🚸 improve search
* 🚸 add examples
* 🚧 start adding documentation for macros
* 📝 add note for https://github.com/nlohmann/json/issues/874#issuecomment-1001699139
* 📝 overwork example handling
* 📝 fix Markdown tables
2021-12-29 13:41:01 +01:00
Niels Lohmann
6d3115924c
Add C++17 copies of the test binaries (#3101)
* ⚗️ add C++17 copies of the test binaries
* ⚗️ use proper header for filesystem
* 🚨 fix warnings
* ⚗️ do not use too old compilers with C++17
*  add test
* 🔨 add more constraints #3097
* ⚗️ use fix from https://github.com/nlohmann/json/pull/3101#issuecomment-998788786
* ⚗️ use fix from https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90050
* 👷 use published CI image
2021-12-29 09:47:05 +01:00
Maarten Becker
825d3230d1
Fix: Warning for shadowed variables (#3188) (#3193)
* Rename variable count to resolve shadowing (#3188)

* Amalgamate: Rename variable count to resolve shadowing (#3188)

Co-authored-by: Maarten Becker <maarten.becker@nuc-eng.com>
2021-12-17 07:24:59 +01:00
Niels Lohmann
e9f88c2fad
Add missing erase(first, last) function to ordered_map (#3109) 2021-11-09 22:24:58 +01:00
Alex Beregszaszi
834918018e
Fix spelling (#3125) 2021-11-09 14:46:58 +01:00
Niels Lohmann
5c08a52fd6
♻️ overwork std specializations (#3121) 2021-11-04 16:38:40 +01:00
Niels Lohmann
5d87c4d409
Add recursive update function (#3069)
*  add recursive update function
2021-11-03 13:52:20 +01:00
Niels Lohmann
7440786b81
Update CI (#3088)
* 👷 prepare GitHub actions for new Docker image

* 👷 use experimental docker image

* 👷 use Clang-Analyzer 14

* 🔇 suppress readability-identifier-length

* 🔇 suppress more Clang-Tidy warnings

* ♻️ simplify code

* 🔇 suppress more Clang-Tidy warnings

* 🔇 suppress more Clang-Tidy warnings

* 🚨 fix warning

* 🚨 fix warning

* 🚨 fix warning

* 👷 use new Docker image
2021-10-29 21:27:34 +02:00
Niels Lohmann
a09bfa5faa
🔖 set version to 3.10.4 2021-10-16 13:34:31 +02:00
Niels Lohmann
80cf9d7065
Revert invalid fix (#3082)
*  revert invalid fix
2021-10-16 13:27:28 +02:00
Niels Lohmann
ba046e4ea4
Allow to use get with explicit constructor (#3079)
*  remove "fix" that caused #3077
2021-10-14 21:01:14 +02:00
Théo DELRIEU
0e694b4060
fix std::filesystem::path regression (#3073)
* 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
2021-10-14 19:19:46 +02:00
Niels Lohmann
ab6a2c7425
🔖 set version to 3.10.3 2021-10-08 13:58:48 +02:00
Théo DELRIEU
80df5e8de6
meta: fix is_compatible/constructible traits (#3020)
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.
2021-10-07 12:32:25 +02:00
Carl Smedstad
62f2997b79
Fix assertion failure for JSON_DIAGNOSTICS (#3037)
* Fix assertion failure #3032
2021-10-07 12:24:09 +02:00
Niels Lohmann
0b345b20c8
Allow allocators for output_vector_adapter (#2989)
* ♻️ allow allocators for vectors

*  add regression tests
2021-09-12 18:55:47 +02:00
Anthony VH
58b83b71dc
Set parent pointers for values inserted via update() (fixes #3007). (#3008)
* 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.
2021-09-12 18:51:25 +02:00
Niels Lohmann
33b674b4b2
🔖 set version to 3.10.2 2021-08-26 08:13:04 +02:00
Giovanni Cerretani
28a169725e
Fix -Wunused warnings on JSON_DIAGNOSTICS (#2976)
* Fix #2975

Define JSON_DIAGNOSTICS to 0 if not defined to fix annoying Wundef warnings.

* amalgamated
2021-08-26 07:35:01 +02:00
Niels Lohmann
8ad66e9136
🔖 set version to 3.10.1 2021-08-24 20:19:55 +02:00
Niels Lohmann
c753165db6
Fix parent update for diagnostics with ordered_json (#2963)
🐛 fix parent update for diagnostics with ordered_json
2021-08-22 20:30:20 +02:00
Pierre Hallot
433604843d
Fix extra ";" clang warnings 2021-08-19 17:04:34 +02:00
Niels Lohmann
cfb71ad1bf
🐛 adding missing header 2021-08-18 13:33:35 +02:00
Niels Lohmann
1de378f580
🔖 set version to 3.10.0 2021-08-17 15:23:23 +02:00
Niels Lohmann
8cae9d7cd2
Overwork warning flags (#2936)
* ⚗️ update warning flags
2021-08-17 14:43:43 +02:00
Niels Lohmann
1aceeff3fc
🚨 fix C4244 warning 2021-08-14 13:40:52 +02:00
Niels Lohmann
0a0eb7a850
Merge branch 'develop' of https://github.com/nlohmann/json into issue2863
 Conflicts:
	.github/workflows/windows.yml
2021-08-14 11:19:48 +02:00
Ferry Huberts
364a21be6b Add coverage exclusion comments, as requested
Signed-off-by: Ferry Huberts <ferry.huberts@pelagic.nl>
2021-08-13 15:30:55 +02:00
Ferry Huberts
e7a69b8d31 Adjust more files after actually building like the CI
Signed-off-by: Ferry Huberts <ferry.huberts@pelagic.nl>
2021-08-13 14:00:00 +02:00
Ferry Huberts
44d60f8d14 All: fix warnings when compiling with -Wswitch-enum
Signed-off-by: Ferry Huberts <ferry.huberts@pelagic.nl>
2021-08-12 16:33:50 +02:00
Niels Lohmann
e20f3f95eb
🚨 guard GCC pragmas #2924 2021-08-11 23:55:46 +02:00
Niels Lohmann
8ae31a56a5
Merge branch 'develop' of https://github.com/nlohmann/json into issue2824 2021-08-11 08:06:32 +02:00
Niels Lohmann
523f7c2c9d
💡 update documentation 2021-08-08 13:24:17 +02:00
Niels Lohmann
176e9bf0ab
add tests for CBOR 2021-08-07 13:14:08 +02:00
Niels Lohmann
89c98dfc20
add option to process binary subtypes in CBOR 2021-08-06 16:41:01 +02:00
Niels Lohmann
b7db1d68d9
♻️ fix CBOR and BSON 2021-08-06 14:36:38 +02:00