From b2bb2cb049fd1bfa427393e63b652ca58005e431 Mon Sep 17 00:00:00 2001 From: Alexey Ochapov Date: Wed, 3 Mar 2021 20:56:40 +0300 Subject: [PATCH] pass format string to format_to() inside format_to_n() in compile-time API instead of compiling it inside format_to_n(), to eliminate code duplication --- include/fmt/compile.h | 18 +----------------- test/compile-test.cc | 4 ++-- 2 files changed, 3 insertions(+), 19 deletions(-) diff --git a/include/fmt/compile.h b/include/fmt/compile.h index 7832dd5c..0ce654c4 100644 --- a/include/fmt/compile.h +++ b/include/fmt/compile.h @@ -844,25 +844,9 @@ template ::value)> format_to_n_result format_to_n(OutputIt out, size_t n, const S&, Args&&... args) { - constexpr auto compiled = detail::compile(S()); -#ifdef __cpp_if_constexpr - if constexpr (std::is_same, - detail::unknown_format>()) { - auto it = - format_to(detail::truncating_iterator(out, n), - static_cast>(S()), - std::forward(args)...); - return {it.base(), it.count()}; - } else { - auto it = format_to(detail::truncating_iterator(out, n), compiled, - std::forward(args)...); - return {it.base(), it.count()}; - } -#else - auto it = format_to(detail::truncating_iterator(out, n), compiled, + auto it = format_to(detail::truncating_iterator(out, n), S(), std::forward(args)...); return {it.base(), it.count()}; -#endif } template diff --git a/test/compile-test.cc b/test/compile-test.cc index 84b75777..6ccef2d0 100644 --- a/test/compile-test.cc +++ b/test/compile-test.cc @@ -239,9 +239,9 @@ TEST(CompileTest, UnknownFormatFallback) { EXPECT_EQ(" 42 ", fmt::string_view(v.data(), v.size())); char buffer[4]; - auto result = fmt::format_to_n(buffer, 4, FMT_COMPILE("{name:^4}"), + auto result = fmt::format_to_n(buffer, 4, FMT_COMPILE("{name:^5}"), fmt::arg("name", 42)); - EXPECT_EQ(4u, result.size); + EXPECT_EQ(5u, result.size); EXPECT_EQ(buffer + 4, result.out); EXPECT_EQ(" 42 ", fmt::string_view(buffer, 4)); }