Skip to content

Commit

Permalink
fix formatted_size with "compiled format" as argument (#2161)
Browse files Browse the repository at this point in the history
  • Loading branch information
alexezeder authored Mar 7, 2021
1 parent 6e1fc01 commit 6a9016e
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 4 deletions.
5 changes: 4 additions & 1 deletion include/fmt/compile.h
Original file line number Diff line number Diff line change
Expand Up @@ -928,7 +928,10 @@ format_to_n_result<OutputIt> format_to_n(OutputIt out, size_t n, const S&,
return {it.base(), it.count()};
}

template <typename CompiledFormat, typename... Args>
template <typename CompiledFormat, typename... Args,
FMT_ENABLE_IF(std::is_base_of<detail::basic_compiled_format,
CompiledFormat>::value ||
detail::is_compiled_string<CompiledFormat>::value)>
size_t formatted_size(const CompiledFormat& cf, const Args&... args) {
return format_to(detail::counting_iterator(), cf, args...).count();
}
Expand Down
6 changes: 3 additions & 3 deletions include/fmt/core.h
Original file line number Diff line number Diff line change
Expand Up @@ -1865,11 +1865,11 @@ inline auto format_to_n(OutputIt out, size_t n, const S& format_str,
Returns the number of characters in the output of
``format(format_str, args...)``.
*/
template <typename... Args>
inline size_t formatted_size(string_view format_str, Args&&... args) {
template <typename S, typename... Args, typename Char = char_t<S>>
inline size_t formatted_size(const S& format_str, Args&&... args) {
const auto& vargs = fmt::make_args_checked<Args...>(format_str, args...);
detail::counting_buffer<> buf;
detail::vformat_to(buf, format_str, vargs);
detail::vformat_to(buf, to_string_view(format_str), vargs);
return buf.count();
}

Expand Down
5 changes: 5 additions & 0 deletions test/compile-test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -261,6 +261,11 @@ TEST(CompileTest, FormatToNWithCompileMacro) {
EXPECT_STREQ("2a", buffer);
}

TEST(CompileTest, FormattedSizeWithCompileMacro) {
EXPECT_EQ(2, fmt::formatted_size(FMT_COMPILE("{0}"), 42));
EXPECT_EQ(5, fmt::formatted_size(FMT_COMPILE("{0:<4.2f}"), 42.0));
}

TEST(CompileTest, TextAndArg) {
EXPECT_EQ(">>>42<<<", fmt::format(FMT_COMPILE(">>>{}<<<"), 42));
EXPECT_EQ("42!", fmt::format(FMT_COMPILE("{}!"), 42));
Expand Down

0 comments on commit 6a9016e

Please sign in to comment.