add forgotten template argument to make_format_args which made some u… (#1877)

* add forgotten template argument to make_format_args which made some uses of FMT_COMPILE not work anymore after 54daa0864a, add more elaborate test cases to compile-test as regression tests

* fix old-style cast which gcc on travis thankfully doesn't accept anymore

* hopefully last forgotten (void*)
This commit is contained in:
rimathia 2020-09-20 15:51:11 +02:00 committed by GitHub
parent 0016da7ab3
commit 2696dc9273
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 35 additions and 10 deletions

View File

@ -444,7 +444,8 @@ template <typename Char, typename T, int N> struct spec_field {
OutputIt format(OutputIt out, const Args&... args) const {
// This ensures that the argument type is convertile to `const T&`.
const T& arg = get<N>(args...);
const auto& vargs = make_format_args(args...);
const auto& vargs =
make_format_args<basic_format_context<OutputIt, Char>>(args...);
basic_format_context<OutputIt, Char> ctx(out, vargs);
return fmt.format(arg, ctx);
}

View File

@ -155,6 +155,9 @@ TEST(CompileTest, FormatWideString) {
TEST(CompileTest, FormatSpecs) {
EXPECT_EQ("42", fmt::format(FMT_COMPILE("{:x}"), 0x42));
EXPECT_EQ("1.234000:0042:+3.13:str:0x3e8:X",
fmt::format(FMT_COMPILE("{:.6f}:{:04}:{:+}:{}:{}:{}"), 1.234, 42,
3.13, "str", reinterpret_cast<void*>(1000), 'X'));
}
TEST(CompileTest, DynamicWidth) {
@ -163,18 +166,39 @@ TEST(CompileTest, DynamicWidth) {
}
TEST(CompileTest, FormatTo) {
char buf[8];
auto end = fmt::format_to(buf, FMT_COMPILE("{}"), 42);
*end = '\0';
EXPECT_STREQ("42", buf);
{
char buf[8];
auto end = fmt::format_to(buf, FMT_COMPILE("{}"), 42);
*end = '\0';
EXPECT_STREQ("42", buf);
}
{
char buf[100];
auto end =
fmt::format_to(buf, FMT_COMPILE("{:.6f}:{:04}:{:+}:{}:{}:{}"), 1.234,
42, 3.13, "str", reinterpret_cast<void*>(1000), 'X');
*end = '\0';
EXPECT_STREQ("1.234000:0042:+3.13:str:0x3e8:X", buf);
}
}
TEST(CompileTest, FormatToNWithCompileMacro) {
constexpr auto buffer_size = 8;
char buffer[buffer_size];
auto res = fmt::format_to_n(buffer, buffer_size, FMT_COMPILE("{}"), 42);
*res.out = '\0';
EXPECT_STREQ("42", buffer);
{
constexpr auto buffer_size = 8;
char buffer[buffer_size];
auto res = fmt::format_to_n(buffer, buffer_size, FMT_COMPILE("{}"), 42);
*res.out = '\0';
EXPECT_STREQ("42", buffer);
}
{
constexpr auto buffer_size = 100;
char buffer[buffer_size];
auto res = fmt::format_to_n(
buffer, buffer_size, FMT_COMPILE("{:.6f}:{:04}:{:+}:{}:{}:{}"), 1.234,
42, 3.13, "str", reinterpret_cast<void*>(1000), 'X');
*res.out = '\0';
EXPECT_STREQ("1.234000:0042:+3.13:str:0x3e8:X", buffer);
}
}
TEST(CompileTest, TextAndArg) {