From fedf3ca24e570492b85eb2b8dc1261e0c805b54a Mon Sep 17 00:00:00 2001 From: Vladislav Shchapov Date: Mon, 20 Feb 2023 21:32:58 +0500 Subject: [PATCH] Add println for compiled format string Signed-off-by: Vladislav Shchapov --- include/fmt/compile.h | 17 +++++++++++++++++ test/compile-test.cc | 4 ++++ 2 files changed, 21 insertions(+) diff --git a/include/fmt/compile.h b/include/fmt/compile.h index 6555fd78..11214d0f 100644 --- a/include/fmt/compile.h +++ b/include/fmt/compile.h @@ -585,12 +585,29 @@ void print(std::FILE* f, const S& format_str, const Args&... args) { detail::print(f, {buffer.data(), buffer.size()}); } +template ::value)> +void println(std::FILE* f, const S& format_str, const Args&... args) { + memory_buffer buffer; + using Char = typename S::char_type; + Char suffix[] = {Char('\n'), 0}; + fmt::format_to(std::back_inserter(buffer), format_str, args...); + buffer.append(suffix, suffix + 1); + detail::print(f, {buffer.data(), buffer.size()}); +} + template ::value)> void print(const S& format_str, const Args&... args) { print(stdout, format_str, args...); } +template ::value)> +void println(const S& format_str, const Args&... args) { + println(stdout, format_str, args...); +} + #if FMT_USE_NONTYPE_TEMPLATE_ARGS inline namespace literals { template constexpr auto operator""_cf() { diff --git a/test/compile-test.cc b/test/compile-test.cc index 5c868b84..524c0a25 100644 --- a/test/compile-test.cc +++ b/test/compile-test.cc @@ -284,8 +284,12 @@ TEST(compile_test, to_string_and_formatter) { TEST(compile_test, print) { EXPECT_WRITE(stdout, fmt::print(FMT_COMPILE("Don't {}!"), "panic"), "Don't panic!"); + EXPECT_WRITE(stdout, fmt::print(FMT_COMPILE("Don't {}!\n"), "panic"), + "Don't panic!\n"); EXPECT_WRITE(stderr, fmt::print(stderr, FMT_COMPILE("Don't {}!"), "panic"), "Don't panic!"); + EXPECT_WRITE(stderr, fmt::print(stderr, FMT_COMPILE("Don't {}!\n"), "panic"), + "Don't panic!\n"); } #endif