)]}'
{
  "commit": "596e33c319d78d425df5a9f3085674c32e89113a",
  "tree": "71306dcb7307594a90ec1e879f88722533d573ce",
  "parents": [
    "5fe4cd288ad41526078c2c47049c980831cea3e5"
  ],
  "author": {
    "name": "Niels Lohmann",
    "email": "mail@nlohmann.me",
    "time": "Fri Aug 21 08:56:43 2026 +0200"
  },
  "committer": {
    "name": "Niels Lohmann",
    "email": "mail@nlohmann.me",
    "time": "Fri Aug 21 12:30:56 2026 +0200"
  },
  "message": "Use the shared descent bookkeeping rather than a second set\n\nComparing kept a thread_local count, a limit and a guard of its own beside\nthe ones copying already had, all three the same thing under a different\nname. They are gone; the shared count, limit and guard do the work.\n\nThe guard grows a second constructor here, because the comparison\noperators are written as a macro and a macro cannot use the preprocessor:\nit cannot look the count up behind an #ifdef the way copy_structured does,\nso the guard looks it up for it. nesting_depth_exhausted() arrives for the\nsame reason - whether an operator descends at all is a constant at every\ncall site, and testing it there is what MSVC reports as C4127.\n\nAlso say in compare_leaves what happens to a pair that is an array on one\nside and an object on the other, since the answer is not obvious from the\ncode: an operator only descends into two values of the same type, so such\na pair is told apart by its types alone - unequal, and ordered the way the\ntypes are - exactly as it is above the bound.\n\nAnd record what the explicit stack costs: the comparison operators are\nnoexcept and the container comparison this replaces allocated nothing, so\nrunning out of memory here ends the process instead of throwing. It takes\na value nested past the bound and an exhausted heap to reach, and the same\ncomparison used to exhaust the call stack, but it is a new way to fail.\n\nSigned-off-by: Niels Lohmann \u003cmail@nlohmann.me\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "a8032076f298a4ad8429a2501f0cac72ab6eda86",
      "old_mode": 33188,
      "old_path": "include/nlohmann/json.hpp",
      "new_id": "ee5327f093f3c12815cdcf055b71b349d8216e4f",
      "new_mode": 33188,
      "new_path": "include/nlohmann/json.hpp"
    },
    {
      "type": "modify",
      "old_id": "f6975bcf45e32285fa82bff4d53de6f83b766744",
      "old_mode": 33188,
      "old_path": "single_include/nlohmann/json.hpp",
      "new_id": "71a93fd9ad40949568d3cba0e62e18add38c4a6c",
      "new_mode": 33188,
      "new_path": "single_include/nlohmann/json.hpp"
    }
  ]
}
