Remove unused would_call_std_* from NLOHMANN_CAN_CALL_STD_FUNC_IMPL
Besides detail::result_of_begin/end, which is_range and iterator_t use, the macro defined a namespace detail2 with a tag type, a catch-all overload and would_call_std_begin/end, plus would_call_std_begin/end structs directly in namespace nlohmann. Nothing has used them since they were added in #3020. Reduce the macro to its detail part. Without the trailing struct the ';' after the two invocations would be an empty declaration that -Wextra-semi flags, so drop it. macro_scope.hpp included meta/detected.hpp only for this macro; all users of detected.hpp include it (or type_traits.hpp) themselves, so remove the include. Behavior and ABI are unchanged. The undocumented, untested and unused names nlohmann::would_call_std_begin, nlohmann::would_call_std_end and namespace nlohmann::detail2 are no longer declared. Part of #5708 Signed-off-by: Niels Lohmann <mail@nlohmann.me>
This commit is contained in:
4 files changed
+96
-147
No files matched your search
@@ -9,7 +9,6 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <utility> // declval, pair
|
#include <utility> // declval, pair
|
||||||
#include <nlohmann/detail/meta/detected.hpp>
|
|
||||||
#include <nlohmann/thirdparty/hedley/hedley.hpp>
|
#include <nlohmann/thirdparty/hedley/hedley.hpp>
|
||||||
|
|
||||||
// This file contains all internal macro definitions (except those affecting ABI)
|
// This file contains all internal macro definitions (except those affecting ABI)
|
||||||
@@ -876,30 +875,6 @@ void templated_json_throw(ExceptionType exception)
|
|||||||
\
|
\
|
||||||
template<typename... T> \
|
template<typename... T> \
|
||||||
using result_of_##std_name = decltype(std_name(std::declval<T>()...)); \
|
using result_of_##std_name = decltype(std_name(std::declval<T>()...)); \
|
||||||
} \
|
|
||||||
\
|
|
||||||
namespace detail2 { \
|
|
||||||
struct std_name##_tag \
|
|
||||||
{ \
|
|
||||||
}; \
|
|
||||||
\
|
|
||||||
template<typename... T> \
|
|
||||||
std_name##_tag std_name(T&&...); \
|
|
||||||
\
|
|
||||||
template<typename... T> \
|
|
||||||
using result_of_##std_name = decltype(std_name(std::declval<T>()...)); \
|
|
||||||
\
|
|
||||||
template<typename... T> \
|
|
||||||
struct would_call_std_##std_name \
|
|
||||||
{ \
|
|
||||||
static constexpr auto const value = ::nlohmann::detail:: \
|
|
||||||
is_detected_exact<std_name##_tag, result_of_##std_name, T...>::value; \
|
|
||||||
}; \
|
|
||||||
} /* namespace detail2 */ \
|
|
||||||
\
|
|
||||||
template<typename... T> \
|
|
||||||
struct would_call_std_##std_name : detail2::would_call_std_##std_name<T...> \
|
|
||||||
{ \
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef JSON_USE_IMPLICIT_CONVERSIONS
|
#ifndef JSON_USE_IMPLICIT_CONVERSIONS
|
||||||
|
|||||||
@@ -12,6 +12,6 @@
|
|||||||
|
|
||||||
NLOHMANN_JSON_NAMESPACE_BEGIN
|
NLOHMANN_JSON_NAMESPACE_BEGIN
|
||||||
|
|
||||||
NLOHMANN_CAN_CALL_STD_FUNC_IMPL(begin);
|
NLOHMANN_CAN_CALL_STD_FUNC_IMPL(begin)
|
||||||
|
|
||||||
NLOHMANN_JSON_NAMESPACE_END
|
NLOHMANN_JSON_NAMESPACE_END
|
||||||
@@ -12,6 +12,6 @@
|
|||||||
|
|
||||||
NLOHMANN_JSON_NAMESPACE_BEGIN
|
NLOHMANN_JSON_NAMESPACE_BEGIN
|
||||||
|
|
||||||
NLOHMANN_CAN_CALL_STD_FUNC_IMPL(end);
|
NLOHMANN_CAN_CALL_STD_FUNC_IMPL(end)
|
||||||
|
|
||||||
NLOHMANN_JSON_NAMESPACE_END
|
NLOHMANN_JSON_NAMESPACE_END
|
||||||
@@ -275,100 +275,6 @@
|
|||||||
|
|
||||||
|
|
||||||
#include <utility> // declval, pair
|
#include <utility> // declval, pair
|
||||||
// #include <nlohmann/detail/meta/detected.hpp>
|
|
||||||
// __ _____ _____ _____
|
|
||||||
// __| | __| | | | 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
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#include <type_traits>
|
|
||||||
|
|
||||||
// #include <nlohmann/detail/meta/void_t.hpp>
|
|
||||||
// __ _____ _____ _____
|
|
||||||
// __| | __| | | | 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
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// #include <nlohmann/detail/abi_macros.hpp>
|
|
||||||
|
|
||||||
|
|
||||||
NLOHMANN_JSON_NAMESPACE_BEGIN
|
|
||||||
namespace detail
|
|
||||||
{
|
|
||||||
|
|
||||||
template<typename ...Ts> struct make_void
|
|
||||||
{
|
|
||||||
using type = void;
|
|
||||||
};
|
|
||||||
template<typename ...Ts> using void_t = typename make_void<Ts...>::type;
|
|
||||||
|
|
||||||
} // namespace detail
|
|
||||||
NLOHMANN_JSON_NAMESPACE_END
|
|
||||||
|
|
||||||
|
|
||||||
NLOHMANN_JSON_NAMESPACE_BEGIN
|
|
||||||
namespace detail
|
|
||||||
{
|
|
||||||
|
|
||||||
// https://en.cppreference.com/w/cpp/experimental/is_detected
|
|
||||||
struct nonesuch
|
|
||||||
{
|
|
||||||
nonesuch() = delete;
|
|
||||||
~nonesuch() = delete;
|
|
||||||
nonesuch(nonesuch const&) = delete;
|
|
||||||
nonesuch(nonesuch const&&) = delete;
|
|
||||||
void operator=(nonesuch const&) = delete;
|
|
||||||
void operator=(nonesuch&&) = delete;
|
|
||||||
};
|
|
||||||
|
|
||||||
template<class Default,
|
|
||||||
class AlwaysVoid,
|
|
||||||
template<class...> class Op,
|
|
||||||
class... Args>
|
|
||||||
struct detector
|
|
||||||
{
|
|
||||||
using value_t = std::false_type;
|
|
||||||
using type = Default;
|
|
||||||
};
|
|
||||||
|
|
||||||
template<class Default, template<class...> class Op, class... Args>
|
|
||||||
struct detector<Default, void_t<Op<Args...>>, Op, Args...>
|
|
||||||
{
|
|
||||||
using value_t = std::true_type;
|
|
||||||
using type = Op<Args...>;
|
|
||||||
};
|
|
||||||
|
|
||||||
template<template<class...> class Op, class... Args>
|
|
||||||
using is_detected = typename detector<nonesuch, void, Op, Args...>::value_t;
|
|
||||||
|
|
||||||
template<template<class...> class Op, class... Args>
|
|
||||||
struct is_detected_lazy : is_detected<Op, Args...> { };
|
|
||||||
|
|
||||||
template<template<class...> class Op, class... Args>
|
|
||||||
using detected_t = typename detector<nonesuch, void, Op, Args...>::type;
|
|
||||||
|
|
||||||
template<class Default, template<class...> class Op, class... Args>
|
|
||||||
using detected_or = detector<Default, void, Op, Args...>;
|
|
||||||
|
|
||||||
template<class Default, template<class...> class Op, class... Args>
|
|
||||||
using detected_or_t = typename detected_or<Default, Op, Args...>::type;
|
|
||||||
|
|
||||||
template<class Expected, template<class...> class Op, class... Args>
|
|
||||||
using is_detected_exact = std::is_same<Expected, detected_t<Op, Args...>>;
|
|
||||||
|
|
||||||
} // namespace detail
|
|
||||||
NLOHMANN_JSON_NAMESPACE_END
|
|
||||||
|
|
||||||
// #include <nlohmann/thirdparty/hedley/hedley.hpp>
|
// #include <nlohmann/thirdparty/hedley/hedley.hpp>
|
||||||
|
|
||||||
|
|
||||||
@@ -3283,30 +3189,6 @@ void templated_json_throw(ExceptionType exception)
|
|||||||
\
|
\
|
||||||
template<typename... T> \
|
template<typename... T> \
|
||||||
using result_of_##std_name = decltype(std_name(std::declval<T>()...)); \
|
using result_of_##std_name = decltype(std_name(std::declval<T>()...)); \
|
||||||
} \
|
|
||||||
\
|
|
||||||
namespace detail2 { \
|
|
||||||
struct std_name##_tag \
|
|
||||||
{ \
|
|
||||||
}; \
|
|
||||||
\
|
|
||||||
template<typename... T> \
|
|
||||||
std_name##_tag std_name(T&&...); \
|
|
||||||
\
|
|
||||||
template<typename... T> \
|
|
||||||
using result_of_##std_name = decltype(std_name(std::declval<T>()...)); \
|
|
||||||
\
|
|
||||||
template<typename... T> \
|
|
||||||
struct would_call_std_##std_name \
|
|
||||||
{ \
|
|
||||||
static constexpr auto const value = ::nlohmann::detail:: \
|
|
||||||
is_detected_exact<std_name##_tag, result_of_##std_name, T...>::value; \
|
|
||||||
}; \
|
|
||||||
} /* namespace detail2 */ \
|
|
||||||
\
|
|
||||||
template<typename... T> \
|
|
||||||
struct would_call_std_##std_name : detail2::would_call_std_##std_name<T...> \
|
|
||||||
{ \
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef JSON_USE_IMPLICIT_CONVERSIONS
|
#ifndef JSON_USE_IMPLICIT_CONVERSIONS
|
||||||
@@ -3856,6 +3738,31 @@ NLOHMANN_JSON_NAMESPACE_END
|
|||||||
// #include <nlohmann/detail/abi_macros.hpp>
|
// #include <nlohmann/detail/abi_macros.hpp>
|
||||||
|
|
||||||
// #include <nlohmann/detail/meta/void_t.hpp>
|
// #include <nlohmann/detail/meta/void_t.hpp>
|
||||||
|
// __ _____ _____ _____
|
||||||
|
// __| | __| | | | 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
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// #include <nlohmann/detail/abi_macros.hpp>
|
||||||
|
|
||||||
|
|
||||||
|
NLOHMANN_JSON_NAMESPACE_BEGIN
|
||||||
|
namespace detail
|
||||||
|
{
|
||||||
|
|
||||||
|
template<typename ...Ts> struct make_void
|
||||||
|
{
|
||||||
|
using type = void;
|
||||||
|
};
|
||||||
|
template<typename ...Ts> using void_t = typename make_void<Ts...>::type;
|
||||||
|
|
||||||
|
} // namespace detail
|
||||||
|
NLOHMANN_JSON_NAMESPACE_END
|
||||||
|
|
||||||
// #include <nlohmann/detail/meta/cpp_future.hpp>
|
// #include <nlohmann/detail/meta/cpp_future.hpp>
|
||||||
|
|
||||||
@@ -3927,7 +3834,7 @@ NLOHMANN_JSON_NAMESPACE_END
|
|||||||
|
|
||||||
NLOHMANN_JSON_NAMESPACE_BEGIN
|
NLOHMANN_JSON_NAMESPACE_BEGIN
|
||||||
|
|
||||||
NLOHMANN_CAN_CALL_STD_FUNC_IMPL(begin);
|
NLOHMANN_CAN_CALL_STD_FUNC_IMPL(begin)
|
||||||
|
|
||||||
NLOHMANN_JSON_NAMESPACE_END
|
NLOHMANN_JSON_NAMESPACE_END
|
||||||
|
|
||||||
@@ -3947,13 +3854,80 @@ NLOHMANN_JSON_NAMESPACE_END
|
|||||||
|
|
||||||
NLOHMANN_JSON_NAMESPACE_BEGIN
|
NLOHMANN_JSON_NAMESPACE_BEGIN
|
||||||
|
|
||||||
NLOHMANN_CAN_CALL_STD_FUNC_IMPL(end);
|
NLOHMANN_CAN_CALL_STD_FUNC_IMPL(end)
|
||||||
|
|
||||||
NLOHMANN_JSON_NAMESPACE_END
|
NLOHMANN_JSON_NAMESPACE_END
|
||||||
|
|
||||||
// #include <nlohmann/detail/meta/cpp_future.hpp>
|
// #include <nlohmann/detail/meta/cpp_future.hpp>
|
||||||
|
|
||||||
// #include <nlohmann/detail/meta/detected.hpp>
|
// #include <nlohmann/detail/meta/detected.hpp>
|
||||||
|
// __ _____ _____ _____
|
||||||
|
// __| | __| | | | 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
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#include <type_traits>
|
||||||
|
|
||||||
|
// #include <nlohmann/detail/meta/void_t.hpp>
|
||||||
|
|
||||||
|
|
||||||
|
NLOHMANN_JSON_NAMESPACE_BEGIN
|
||||||
|
namespace detail
|
||||||
|
{
|
||||||
|
|
||||||
|
// https://en.cppreference.com/w/cpp/experimental/is_detected
|
||||||
|
struct nonesuch
|
||||||
|
{
|
||||||
|
nonesuch() = delete;
|
||||||
|
~nonesuch() = delete;
|
||||||
|
nonesuch(nonesuch const&) = delete;
|
||||||
|
nonesuch(nonesuch const&&) = delete;
|
||||||
|
void operator=(nonesuch const&) = delete;
|
||||||
|
void operator=(nonesuch&&) = delete;
|
||||||
|
};
|
||||||
|
|
||||||
|
template<class Default,
|
||||||
|
class AlwaysVoid,
|
||||||
|
template<class...> class Op,
|
||||||
|
class... Args>
|
||||||
|
struct detector
|
||||||
|
{
|
||||||
|
using value_t = std::false_type;
|
||||||
|
using type = Default;
|
||||||
|
};
|
||||||
|
|
||||||
|
template<class Default, template<class...> class Op, class... Args>
|
||||||
|
struct detector<Default, void_t<Op<Args...>>, Op, Args...>
|
||||||
|
{
|
||||||
|
using value_t = std::true_type;
|
||||||
|
using type = Op<Args...>;
|
||||||
|
};
|
||||||
|
|
||||||
|
template<template<class...> class Op, class... Args>
|
||||||
|
using is_detected = typename detector<nonesuch, void, Op, Args...>::value_t;
|
||||||
|
|
||||||
|
template<template<class...> class Op, class... Args>
|
||||||
|
struct is_detected_lazy : is_detected<Op, Args...> { };
|
||||||
|
|
||||||
|
template<template<class...> class Op, class... Args>
|
||||||
|
using detected_t = typename detector<nonesuch, void, Op, Args...>::type;
|
||||||
|
|
||||||
|
template<class Default, template<class...> class Op, class... Args>
|
||||||
|
using detected_or = detector<Default, void, Op, Args...>;
|
||||||
|
|
||||||
|
template<class Default, template<class...> class Op, class... Args>
|
||||||
|
using detected_or_t = typename detected_or<Default, Op, Args...>::type;
|
||||||
|
|
||||||
|
template<class Expected, template<class...> class Op, class... Args>
|
||||||
|
using is_detected_exact = std::is_same<Expected, detected_t<Op, Args...>>;
|
||||||
|
|
||||||
|
} // namespace detail
|
||||||
|
NLOHMANN_JSON_NAMESPACE_END
|
||||||
|
|
||||||
// #include <nlohmann/json_fwd.hpp>
|
// #include <nlohmann/json_fwd.hpp>
|
||||||
// __ _____ _____ _____
|
// __ _____ _____ _____
|
||||||
|
|||||||
Reference in new issue
Block a user