mirror of
https://github.com/nlohmann/json.git
synced 2026-05-14 18:25:25 +00:00
7192763f15
* Fix compile error when using nlohmann ordered_map with WITH_DEFAULT macros ordered_map inherits its copy and move assignment from the underlying std vector, which requires value_type to be CopyAssignable. value_type is pair<const Key, T> whose assignment is deleted because of the const Key, so any code that assigns ordered_map (for example the ternary in NLOHMANN_JSON_FROM_WITH_DEFAULT) fails to compile (issue #5122). Provide assignment operators on ordered_map that rebuild via clear plus push_back for copy and transfer the underlying buffer for move, neither of which needs pair assignment. Also switch the map-shaped from_json overload from a transform plus inserter idiom to a range-for plus emplace, which avoids the same hazard. Signed-off-by: Samaresh Kumar Singh <ssam3003@gmail.com> * Update ordered_map.hpp removed unwanted comments Signed-off-by: SamareshSingh <97642706+ssam18@users.noreply.github.com> Signed-off-by: Samaresh Kumar Singh <ssam3003@gmail.com> * Update json.hpp Signed-off-by: SamareshSingh <97642706+ssam18@users.noreply.github.com> Signed-off-by: Samaresh Kumar Singh <ssam3003@gmail.com> * Address CI issues for ordered_map fix Declare an explicit defaulted destructor on ordered_map so the rule of five is complete (clang-tidy cppcoreguidelines-special-member-functions and hicpp-special-member-functions). Initialize the ordered_map field in the regression test struct so GCC effective-C++ stops flagging Example_5122 with a missing member initializer. Signed-off-by: Samaresh Kumar Singh <ssam3003@gmail.com> * Suppress redundant-member-init lint on Example_5122::c The empty brace-init on c{} is required by GCC -Weffc++ to mark the member as initialized in the synthesized default constructor, but clang-tidy readability-redundant-member-init flags the same line because ordered_map already has a default constructor. The two checks pull in opposite directions, so add a targeted NOLINT to keep both happy. Signed-off-by: Samaresh Kumar Singh <ssam3003@gmail.com> * Address review: strong exception safety in copy-assign, simplify move-assign noexcept Copy assignment now constructs a temporary copy before move-assigning the Container subobject, preserving *this if the copy throws. Move assignment uses std::is_nothrow_move_assignable<Container> for a cleaner noexcept specifier, matching the style of the move constructor. Signed-off-by: Samaresh Kumar Singh <ssam3003@gmail.com> * Restore self-assignment check in copy-assign to satisfy cert-oop54-cpp clang-tidy's cert-oop54-cpp flagged the previous revision because it could not recognize the implicit self-safety of the copy-then-move pattern. Restore the explicit `if (this != &other)` guard — strong exception safety is preserved since the temporary copy is still constructed before the move-assign of the Container subobject. Signed-off-by: Samaresh Kumar Singh <ssam3003@gmail.com> * Address review: add explicit self-assignment and move-assignment tests for ordered_map Signed-off-by: Samaresh Kumar Singh <ssam3003@gmail.com> * Address review: gate -Wself-assign-overloaded suppression on Clang version -Wself-assign-overloaded was introduced in Clang 7. Older Clang versions fail the build with "unknown warning group" when the suppression pragma references it unconditionally. Use __has_warning inside an __clang__ branch so the suppression is only emitted on Clang versions that recognize the warning. The inner check stays inside the __clang__ guard because GCC does not provide __has_warning and would tokenize-error on the argument list. Signed-off-by: Samaresh Kumar Singh <ssam3003@gmail.com> * Address CI: drop unused gating macro to silence -Wunused-macros The previous attempt defined JSON_TEST_5122_SUPPRESS_SELF_ASSIGN_OVERLOADED as 0 unconditionally and then overrode it to 1 on Clang versions that recognize the warning. On those Clangs the initial define is immediately undef'd without being read, which trips Clang's -Wunused-macros under -Weverything in the ci_test_clang job. Drop the macro and gate the DOCTEST_CLANG_SUPPRESS_WARNING_PUSH/POP pragmas directly with __has_warning inside the existing __clang__ branch. Signed-off-by: Samaresh Kumar Singh <ssam3003@gmail.com> --------- Signed-off-by: Samaresh Kumar Singh <ssam3003@gmail.com> Signed-off-by: SamareshSingh <97642706+ssam18@users.noreply.github.com>