| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 | //     __ _____ _____ _____//  __|  |   __|     |   | |  JSON for Modern C++// |  |  |__   |  |  | | | |  version 3.12.0// |_____|_____|_____|_|___|  https://github.com/nlohmann/json//// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann <https://nlohmann.me>// SPDX-License-Identifier: MIT#pragma once#include <initializer_list>#include <utility>#include <nlohmann/detail/abi_macros.hpp>#include <nlohmann/detail/meta/type_traits.hpp>NLOHMANN_JSON_NAMESPACE_BEGINnamespace detail{template<typename BasicJsonType>class json_ref{  public:    using value_type = BasicJsonType;    json_ref(value_type&& value)        : owned_value(std::move(value))    {}    json_ref(const value_type& value)        : value_ref(&value)    {}    json_ref(std::initializer_list<json_ref> init)        : owned_value(init)    {}    template <        class... Args,        enable_if_t<std::is_constructible<value_type, Args...>::value, int> = 0 >    json_ref(Args && ... args)        : owned_value(std::forward<Args>(args)...)    {}    // class should be movable only    json_ref(json_ref&&) noexcept = default;    json_ref(const json_ref&) = delete;    json_ref& operator=(const json_ref&) = delete;    json_ref& operator=(json_ref&&) = delete;    ~json_ref() = default;    value_type moved_or_copied() const    {        if (value_ref == nullptr)        {            return std::move(owned_value);        }        return *value_ref;    }    value_type const& operator*() const    {        return value_ref ? *value_ref : owned_value;    }    value_type const* operator->() const    {        return &** this;    }  private:    mutable value_type owned_value = nullptr;    value_type const* value_ref = nullptr;};}  // namespace detailNLOHMANN_JSON_NAMESPACE_END
 |