Add println for compiled format string

Signed-off-by: Vladislav Shchapov <vladislav@shchapov.ru>
This commit is contained in:
Vladislav Shchapov 2023-02-20 21:32:58 +05:00
parent 4bbe317bef
commit fedf3ca24e
2 changed files with 21 additions and 0 deletions

View File

@ -585,12 +585,29 @@ void print(std::FILE* f, const S& format_str, const Args&... args) {
detail::print(f, {buffer.data(), buffer.size()});
}
template <typename S, typename... Args,
FMT_ENABLE_IF(detail::is_compiled_string<S>::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 <typename S, typename... Args,
FMT_ENABLE_IF(detail::is_compiled_string<S>::value)>
void print(const S& format_str, const Args&... args) {
print(stdout, format_str, args...);
}
template <typename S, typename... Args,
FMT_ENABLE_IF(detail::is_compiled_string<S>::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 <detail_exported::fixed_string Str> constexpr auto operator""_cf() {

View File

@ -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