// __ _____ _____ _____// __| | __| | | | JSON for Modern C++ (supporting code)// | | |__ | | | | | | version 3.12.0// |_____|_____|_____|_|___| https://github.com/nlohmann/json//// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann <https://nlohmann.me>// SPDX-License-Identifier: MIT#include "doctest_compatibility.h"// disable -Wnoexcept due to struct pod_bisDOCTEST_GCC_SUPPRESS_WARNING_PUSHDOCTEST_GCC_SUPPRESS_WARNING("-Wnoexcept")// skip tests if JSON_DisableEnumSerialization=ON (#4384)#if defined(JSON_DISABLE_ENUM_SERIALIZATION) && (JSON_DISABLE_ENUM_SERIALIZATION == 1)#define SKIP_TESTS_FOR_ENUM_SERIALIZATION#endif#include <nlohmann/json.hpp>using nlohmann::json;namespace{enum test {}; // NOLINT(cppcoreguidelines-use-enum-class)struct pod {};struct pod_bis {};void to_json(json& /*unused*/, pod /*unused*/) noexcept;void to_json(json& /*unused*/, pod_bis /*unused*/);void from_json(const json& /*unused*/, pod /*unused*/) noexcept;void from_json(const json& /*unused*/, pod_bis /*unused*/);void to_json(json& /*unused*/, pod /*unused*/) noexcept {}void to_json(json& /*unused*/, pod_bis /*unused*/) {}void from_json(const json& /*unused*/, pod /*unused*/) noexcept {}void from_json(const json& /*unused*/, pod_bis /*unused*/) {}static_assert(noexcept(json{}), "");static_assert(noexcept(nlohmann::to_json(std::declval<json&>(), 2)), "");static_assert(noexcept(nlohmann::to_json(std::declval<json&>(), 2.5)), "");static_assert(noexcept(nlohmann::to_json(std::declval<json&>(), true)), "");#ifndef SKIP_TESTS_FOR_ENUM_SERIALIZATIONstatic_assert(noexcept(nlohmann::to_json(std::declval<json&>(), test {})), "");#endifstatic_assert(noexcept(nlohmann::to_json(std::declval<json&>(), pod {})), "");static_assert(!noexcept(nlohmann::to_json(std::declval<json&>(), pod_bis{})), "");static_assert(noexcept(json(2)), "");#ifndef SKIP_TESTS_FOR_ENUM_SERIALIZATIONstatic_assert(noexcept(json(test {})), "");#endifstatic_assert(noexcept(json(pod {})), "");static_assert(noexcept(std::declval<json>().get<pod>()), "");static_assert(!noexcept(std::declval<json>().get<pod_bis>()), "");static_assert(noexcept(json(pod{})), "");} // namespaceTEST_CASE("noexcept"){// silence -Wunneeded-internal-declaration errorsstatic_cast<void>(static_cast<void(*)(json&, pod)>(&to_json));static_cast<void>(static_cast<void(*)(json&, pod_bis)>(&to_json));static_cast<void>(static_cast<void(*)(const json&, pod)>(&from_json));static_cast<void>(static_cast<void(*)(const json&, pod_bis)>(&from_json));SECTION("nothrow-copy-constructible exceptions"){// for ERR60-CPP (https://github.com/nlohmann/json/issues/531):// Exceptions should be nothrow-copy-constructible. However, compilers// treat std::runtime_exception differently in this regard. Therefore,// we can only demand nothrow-copy-constructibility for our exceptions// if std::runtime_exception is.CHECK(std::is_nothrow_copy_constructible<json::exception>::value == std::is_nothrow_copy_constructible<std::runtime_error>::value);CHECK(std::is_nothrow_copy_constructible<json::parse_error>::value == std::is_nothrow_copy_constructible<std::runtime_error>::value);CHECK(std::is_nothrow_copy_constructible<json::invalid_iterator>::value == std::is_nothrow_copy_constructible<std::runtime_error>::value);CHECK(std::is_nothrow_copy_constructible<json::type_error>::value == std::is_nothrow_copy_constructible<std::runtime_error>::value);CHECK(std::is_nothrow_copy_constructible<json::out_of_range>::value == std::is_nothrow_copy_constructible<std::runtime_error>::value);CHECK(std::is_nothrow_copy_constructible<json::other_error>::value == std::is_nothrow_copy_constructible<std::runtime_error>::value);}}DOCTEST_GCC_SUPPRESS_WARNING_POP
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。