From bc3af512720da527690c58d2edab4ca1892b1f1d Mon Sep 17 00:00:00 2001 From: Victor Zverovich Date: Sun, 1 Sep 2024 19:44:34 -0700 Subject: [PATCH] Reduce the number of instantiations --- include/fmt/base.h | 18 +++++++++--------- test/base-test.cc | 4 ++-- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/include/fmt/base.h b/include/fmt/base.h index 378d79f9..f9fd350d 100644 --- a/include/fmt/base.h +++ b/include/fmt/base.h @@ -876,20 +876,20 @@ template struct format_as_result { }; template using format_as_t = typename format_as_result::type; -template +template constexpr auto has_const_formatter_impl(T*) - -> decltype(typename Context::template formatter_type().format( - std::declval(), std::declval()), + -> decltype(formatter().format( + std::declval(), + std::declval&>()), true) { return true; } -template -constexpr auto has_const_formatter_impl(...) -> bool { +template constexpr auto has_const_formatter_impl(...) -> bool { return false; } -template +template constexpr auto has_const_formatter() -> bool { - return has_const_formatter_impl(static_cast(nullptr)); + return has_const_formatter_impl(static_cast(nullptr)); } struct unformattable {}; @@ -1002,7 +1002,7 @@ template struct arg_mapper { template > struct formattable - : bool_constant() || + : bool_constant() || (std::is_constructible>::value && !std::is_const::value)> {}; @@ -2341,7 +2341,7 @@ template class value { auto f = Formatter(); parse_ctx.advance_to(f.parse(parse_ctx)); using qualified_type = - conditional_t(), const T, T>; + conditional_t(), const T, T>; // format must be const for compatibility with std::format and compilation. const auto& cf = f; ctx.advance_to(cf.format(*static_cast(arg), ctx)); diff --git a/test/base-test.cc b/test/base-test.cc index 3d5a74ab..c5ba3a80 100644 --- a/test/base-test.cc +++ b/test/base-test.cc @@ -820,9 +820,9 @@ TEST(base_test, format_explicitly_convertible_to_std_string_view) { TEST(base_test, has_const_formatter) { EXPECT_TRUE((fmt::detail::has_const_formatter())); + char>())); EXPECT_FALSE((fmt::detail::has_const_formatter())); + char>())); } TEST(base_test, format_nonconst) {