Fix the Ubuntu CI failures of the unity test build

- build unit-noexcept.cpp on its own: it suppresses GCC's -Wnoexcept
  around its include of the library, which has no effect once another
  file of the batch included the library first
- unit-comparison.cpp: make make_unordered_object inline
  (-Wmissing-prototypes in a named namespace) and replace the
  using-directive by using-declarations, as Clang reports a
  using-directive in an #include-d file (-Wheader-hygiene)
- unit-json_pointer-cpp20.cpp: include <compare> only with
  JSON_HAS_THREE_WAY_COMPARISON; GCC 9 and Clang 9 accept C++20 but
  have no <compare>

Signed-off-by: Niels Lohmann <mail@nlohmann.me>
This commit is contained in:
Niels Lohmann committed 2026-10-10 05:43:28 +02:00
1 parent 020a834128
commit 169f1fcb2d
3 files changed
+18 -6

No files matched your search

+5 -3
View File
@@ -416,9 +416,11 @@ function(json_test_add_unity_tests)
endforeach()
# files that must not be merged into a batch: unit-32bit.cpp is only built
# for 32bit targets, and unit-no-macro-leak.cpp checks that including the
# library defines no unprefixed macro, which any other file would disturb
set(standalone_files unit-32bit.cpp unit-no-macro-leak.cpp)
# for 32bit targets, unit-no-macro-leak.cpp checks that including the
# library defines no unprefixed macro, which any other file would disturb,
# and unit-noexcept.cpp suppresses GCC's -Wnoexcept around its include of
# the library, which has no effect once another file included it first
set(standalone_files unit-32bit.cpp unit-no-macro-leak.cpp unit-noexcept.cpp)
set(harmless_macros "^(DOCTEST_.*|SKIP_TESTS_FOR_.*|JSON_TEST_DEPRECATED_FUNCTIONS_DELETED|JSON_TEST_STRICT_NUL_HANDLING_ENABLED|JSON_TEST_STRINGIZE)$")
+10 -2
View File
@@ -595,7 +595,7 @@ struct unordered_object_t : std::map<Key, Value, directed_less<Key>, Allocator>
using unordered_json = nlohmann::json::with_object_t<unordered_object_t>;
// the entries "0" to "9", enumerated in ascending or in descending order
unordered_json make_unordered_object(const bool descending)
inline unordered_json make_unordered_object(const bool descending)
{
unordered_json j = unordered_json::object_t(directed_less<std::string>(descending));
for (int i = 0; i < 10; ++i)
@@ -676,7 +676,15 @@ using case_insensitive_map = std::map<Key, Value, case_insensitive_less, Allocat
using ci_json = nlohmann::json::with_object_t<case_insensitive_map>;
} // namespace unit_comparison_detail
using namespace unit_comparison_detail; // NOLINT(google-build-using-namespace)
// using-declarations rather than a using-directive, as this file may be
// #include-d into a batch with other test files (JSON_TestUnityBuild)
using unit_comparison_detail::ci_json;
using unit_comparison_detail::innermost;
using unit_comparison_detail::key_case_json;
using unit_comparison_detail::key_case_less;
using unit_comparison_detail::make_unordered_object;
using unit_comparison_detail::nest;
using unit_comparison_detail::unordered_json;
TEST_CASE("equality of objects whose entries have no fixed order")
{
+3 -1
View File
@@ -28,7 +28,9 @@ using nlohmann::json;
#endif
#ifdef JSON_HAS_CPP_20
#include <compare>
#if JSON_HAS_THREE_WAY_COMPARISON
#include <compare>
#endif
#include <string>
#include <type_traits>