#include <iostream>
#include <iomanip>
#include <nlohmann/json.hpp>

using nlohmann::json;
using namespace nlohmann::literals;

int main()
{
    // the original document
    json doc = R"(
        {
          "a": 1,
          "b": 2
        }
    )"_json;

    // a patch whose second operation fails
    json patch = R"(
        [
          { "op": "replace", "path": "/a", "value": 99 },
          { "op": "remove", "path": "/nonexistent" }
        ]
    )"_json;

    // exception out_of_range.403
    try
    {
        doc.patch_inplace(patch);
    }
    catch (const json::out_of_range& e)
    {
        std::cout << e.what() << '\n';
    }

    // the first operation has already been applied to doc
    std::cout << std::setw(4) << doc << '\n';
}
