mirror of
https://github.com/nlohmann/json.git
synced 2026-09-07 00:37:58 +00:00
include/nlohmann/detail/macro_unscope.hpp includes hedley_undef.hpp to #undef every JSON_HEDLEY_* macro so none of them leak into the including translation unit. Four macros were missing from that list and therefore stayed defined after #include <nlohmann/json.hpp>: - JSON_HEDLEY_PRAGMA - JSON_HEDLEY_PREDICT_TRUE - JSON_HEDLEY_PREDICT_FALSE - JSON_HEDLEY_CLANG_HAS_DECLSPEC_ATTRIBUTE hedley_undef.hpp is generated (via `make update_hedley`) by grepping hedley.hpp for its own internal `#undef JSON_HEDLEY_X` redefinition guards. JSON_HEDLEY_PRAGMA/PREDICT_TRUE/PREDICT_FALSE have no such guard in upstream Hedley, so they were never picked up. The guard for JSON_HEDLEY_CLANG_HAS_DECLSPEC_ATTRIBUTE also has an upstream typo (`JSON_HEDLEY_CLANG_HAS_DECLSPEC_DECLSPEC_ATTRIBUTE`), so hedley_undef.hpp was undefining the wrong (never-defined) name. Fixes: - include/nlohmann/thirdparty/hedley/hedley_undef.hpp: corrected the DECLSPEC_ATTRIBUTE typo and added the three missing #undef lines, keeping the file's alphabetical ordering. - Makefile (update_hedley target): changed hedley_undef.hpp generation to extract macro names directly from every `#define JSON_HEDLEY_...` in hedley.hpp instead of from existing `#undef` guards, so a future `make update_hedley` run undefines every macro Hedley actually defines, even ones without a pre-existing redefinition guard. This was not run in this PR (it would also pull in an unrelated upstream Hedley sync); hedley_undef.hpp was hand-patched instead and single_include was regenerated with `make amalgamate`. - tests/src/unit-no-macro-leak.cpp: new regression test (picked up automatically by tests/CMakeLists.txt's existing unit-*.cpp glob) that includes json.hpp and then #ifdef/#error-checks every JSON_HEDLEY_* macro name, so any future leak of any of the 151 vendored macros fails the build, not just the four fixed here. Fixes #5408. Signed-off-by: Niels Lohmann <mail@nlohmann.me>
162 lines
5.5 KiB
C++
162 lines
5.5 KiB
C++
// __ _____ _____ _____
|
|
// __| | __| | | | JSON for Modern C++
|
|
// | | |__ | | | | | | version 3.12.0
|
|
// |_____|_____|_____|_|___| https://github.com/nlohmann/json
|
|
//
|
|
// SPDX-FileCopyrightText: 2013-2026 Niels Lohmann <https://nlohmann.me>
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
#pragma once
|
|
|
|
#undef JSON_HEDLEY_ALWAYS_INLINE
|
|
#undef JSON_HEDLEY_ARM_VERSION
|
|
#undef JSON_HEDLEY_ARM_VERSION_CHECK
|
|
#undef JSON_HEDLEY_ARRAY_PARAM
|
|
#undef JSON_HEDLEY_ASSUME
|
|
#undef JSON_HEDLEY_BEGIN_C_DECLS
|
|
#undef JSON_HEDLEY_CLANG_HAS_ATTRIBUTE
|
|
#undef JSON_HEDLEY_CLANG_HAS_BUILTIN
|
|
#undef JSON_HEDLEY_CLANG_HAS_CPP_ATTRIBUTE
|
|
#undef JSON_HEDLEY_CLANG_HAS_DECLSPEC_ATTRIBUTE
|
|
#undef JSON_HEDLEY_CLANG_HAS_EXTENSION
|
|
#undef JSON_HEDLEY_CLANG_HAS_FEATURE
|
|
#undef JSON_HEDLEY_CLANG_HAS_WARNING
|
|
#undef JSON_HEDLEY_COMPCERT_VERSION
|
|
#undef JSON_HEDLEY_COMPCERT_VERSION_CHECK
|
|
#undef JSON_HEDLEY_CONCAT
|
|
#undef JSON_HEDLEY_CONCAT3
|
|
#undef JSON_HEDLEY_CONCAT3_EX
|
|
#undef JSON_HEDLEY_CONCAT_EX
|
|
#undef JSON_HEDLEY_CONST
|
|
#undef JSON_HEDLEY_CONSTEXPR
|
|
#undef JSON_HEDLEY_CONST_CAST
|
|
#undef JSON_HEDLEY_CPP_CAST
|
|
#undef JSON_HEDLEY_CRAY_VERSION
|
|
#undef JSON_HEDLEY_CRAY_VERSION_CHECK
|
|
#undef JSON_HEDLEY_C_DECL
|
|
#undef JSON_HEDLEY_DEPRECATED
|
|
#undef JSON_HEDLEY_DEPRECATED_FOR
|
|
#undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL
|
|
#undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_
|
|
#undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED
|
|
#undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES
|
|
#undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS
|
|
#undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION
|
|
#undef JSON_HEDLEY_DIAGNOSTIC_POP
|
|
#undef JSON_HEDLEY_DIAGNOSTIC_PUSH
|
|
#undef JSON_HEDLEY_DMC_VERSION
|
|
#undef JSON_HEDLEY_DMC_VERSION_CHECK
|
|
#undef JSON_HEDLEY_EMPTY_BASES
|
|
#undef JSON_HEDLEY_EMSCRIPTEN_VERSION
|
|
#undef JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK
|
|
#undef JSON_HEDLEY_END_C_DECLS
|
|
#undef JSON_HEDLEY_FLAGS
|
|
#undef JSON_HEDLEY_FLAGS_CAST
|
|
#undef JSON_HEDLEY_GCC_HAS_ATTRIBUTE
|
|
#undef JSON_HEDLEY_GCC_HAS_BUILTIN
|
|
#undef JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE
|
|
#undef JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE
|
|
#undef JSON_HEDLEY_GCC_HAS_EXTENSION
|
|
#undef JSON_HEDLEY_GCC_HAS_FEATURE
|
|
#undef JSON_HEDLEY_GCC_HAS_WARNING
|
|
#undef JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK
|
|
#undef JSON_HEDLEY_GCC_VERSION
|
|
#undef JSON_HEDLEY_GCC_VERSION_CHECK
|
|
#undef JSON_HEDLEY_GNUC_HAS_ATTRIBUTE
|
|
#undef JSON_HEDLEY_GNUC_HAS_BUILTIN
|
|
#undef JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE
|
|
#undef JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE
|
|
#undef JSON_HEDLEY_GNUC_HAS_EXTENSION
|
|
#undef JSON_HEDLEY_GNUC_HAS_FEATURE
|
|
#undef JSON_HEDLEY_GNUC_HAS_WARNING
|
|
#undef JSON_HEDLEY_GNUC_VERSION
|
|
#undef JSON_HEDLEY_GNUC_VERSION_CHECK
|
|
#undef JSON_HEDLEY_HAS_ATTRIBUTE
|
|
#undef JSON_HEDLEY_HAS_BUILTIN
|
|
#undef JSON_HEDLEY_HAS_CPP_ATTRIBUTE
|
|
#undef JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS
|
|
#undef JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE
|
|
#undef JSON_HEDLEY_HAS_EXTENSION
|
|
#undef JSON_HEDLEY_HAS_FEATURE
|
|
#undef JSON_HEDLEY_HAS_WARNING
|
|
#undef JSON_HEDLEY_IAR_VERSION
|
|
#undef JSON_HEDLEY_IAR_VERSION_CHECK
|
|
#undef JSON_HEDLEY_IBM_VERSION
|
|
#undef JSON_HEDLEY_IBM_VERSION_CHECK
|
|
#undef JSON_HEDLEY_IMPORT
|
|
#undef JSON_HEDLEY_INLINE
|
|
#undef JSON_HEDLEY_INTEL_CL_VERSION
|
|
#undef JSON_HEDLEY_INTEL_CL_VERSION_CHECK
|
|
#undef JSON_HEDLEY_INTEL_VERSION
|
|
#undef JSON_HEDLEY_INTEL_VERSION_CHECK
|
|
#undef JSON_HEDLEY_IS_CONSTANT
|
|
#undef JSON_HEDLEY_IS_CONSTEXPR_
|
|
#undef JSON_HEDLEY_LIKELY
|
|
#undef JSON_HEDLEY_MALLOC
|
|
#undef JSON_HEDLEY_MCST_LCC_VERSION
|
|
#undef JSON_HEDLEY_MCST_LCC_VERSION_CHECK
|
|
#undef JSON_HEDLEY_MESSAGE
|
|
#undef JSON_HEDLEY_MSVC_VERSION
|
|
#undef JSON_HEDLEY_MSVC_VERSION_CHECK
|
|
#undef JSON_HEDLEY_NEVER_INLINE
|
|
#undef JSON_HEDLEY_NON_NULL
|
|
#undef JSON_HEDLEY_NO_ESCAPE
|
|
#undef JSON_HEDLEY_NO_RETURN
|
|
#undef JSON_HEDLEY_NO_THROW
|
|
#undef JSON_HEDLEY_NULL
|
|
#undef JSON_HEDLEY_PELLES_VERSION
|
|
#undef JSON_HEDLEY_PELLES_VERSION_CHECK
|
|
#undef JSON_HEDLEY_PGI_VERSION
|
|
#undef JSON_HEDLEY_PGI_VERSION_CHECK
|
|
#undef JSON_HEDLEY_PRAGMA
|
|
#undef JSON_HEDLEY_PREDICT
|
|
#undef JSON_HEDLEY_PREDICT_FALSE
|
|
#undef JSON_HEDLEY_PREDICT_TRUE
|
|
#undef JSON_HEDLEY_PRINTF_FORMAT
|
|
#undef JSON_HEDLEY_PRIVATE
|
|
#undef JSON_HEDLEY_PUBLIC
|
|
#undef JSON_HEDLEY_PURE
|
|
#undef JSON_HEDLEY_REINTERPRET_CAST
|
|
#undef JSON_HEDLEY_REQUIRE
|
|
#undef JSON_HEDLEY_REQUIRE_CONSTEXPR
|
|
#undef JSON_HEDLEY_REQUIRE_MSG
|
|
#undef JSON_HEDLEY_RESTRICT
|
|
#undef JSON_HEDLEY_RETURNS_NON_NULL
|
|
#undef JSON_HEDLEY_SENTINEL
|
|
#undef JSON_HEDLEY_STATIC_ASSERT
|
|
#undef JSON_HEDLEY_STATIC_CAST
|
|
#undef JSON_HEDLEY_STRINGIFY
|
|
#undef JSON_HEDLEY_STRINGIFY_EX
|
|
#undef JSON_HEDLEY_SUNPRO_VERSION
|
|
#undef JSON_HEDLEY_SUNPRO_VERSION_CHECK
|
|
#undef JSON_HEDLEY_TINYC_VERSION
|
|
#undef JSON_HEDLEY_TINYC_VERSION_CHECK
|
|
#undef JSON_HEDLEY_TI_ARMCL_VERSION
|
|
#undef JSON_HEDLEY_TI_ARMCL_VERSION_CHECK
|
|
#undef JSON_HEDLEY_TI_CL2000_VERSION
|
|
#undef JSON_HEDLEY_TI_CL2000_VERSION_CHECK
|
|
#undef JSON_HEDLEY_TI_CL430_VERSION
|
|
#undef JSON_HEDLEY_TI_CL430_VERSION_CHECK
|
|
#undef JSON_HEDLEY_TI_CL6X_VERSION
|
|
#undef JSON_HEDLEY_TI_CL6X_VERSION_CHECK
|
|
#undef JSON_HEDLEY_TI_CL7X_VERSION
|
|
#undef JSON_HEDLEY_TI_CL7X_VERSION_CHECK
|
|
#undef JSON_HEDLEY_TI_CLPRU_VERSION
|
|
#undef JSON_HEDLEY_TI_CLPRU_VERSION_CHECK
|
|
#undef JSON_HEDLEY_TI_VERSION
|
|
#undef JSON_HEDLEY_TI_VERSION_CHECK
|
|
#undef JSON_HEDLEY_UNAVAILABLE
|
|
#undef JSON_HEDLEY_UNLIKELY
|
|
#undef JSON_HEDLEY_UNPREDICTABLE
|
|
#undef JSON_HEDLEY_UNREACHABLE
|
|
#undef JSON_HEDLEY_UNREACHABLE_RETURN
|
|
#undef JSON_HEDLEY_VERSION
|
|
#undef JSON_HEDLEY_VERSION_DECODE_MAJOR
|
|
#undef JSON_HEDLEY_VERSION_DECODE_MINOR
|
|
#undef JSON_HEDLEY_VERSION_DECODE_REVISION
|
|
#undef JSON_HEDLEY_VERSION_ENCODE
|
|
#undef JSON_HEDLEY_WARNING
|
|
#undef JSON_HEDLEY_WARN_UNUSED_RESULT
|
|
#undef JSON_HEDLEY_WARN_UNUSED_RESULT_MSG
|
|
#undef JSON_HEDLEY_FALL_THROUGH
|