Fix handling of unpacked args (#437)
diff --git a/fmt/format.h b/fmt/format.h
index 8a0623f..6a58f33 100644
--- a/fmt/format.h
+++ b/fmt/format.h
@@ -1538,7 +1538,7 @@
class format_arg_store {
private:
static const size_t NUM_ARGS = sizeof...(Args);
- static const bool IS_PACKED = NUM_ARGS <= internal::MAX_PACKED_ARGS;
+ static const bool IS_PACKED = NUM_ARGS < internal::MAX_PACKED_ARGS;
typedef typename Context::char_type char_type;
@@ -1552,7 +1552,7 @@
static const uint64_t TYPES = internal::make_type<Args..., void>();
format_arg_store(const Args &... args)
- : data_{{internal::MakeValue<Context>(args)...}} {}
+ : data_{{internal::MakeArg<Context>(args)...}} {}
const value_type *data() const { return data_.data(); }
};
diff --git a/test/format-test.cc b/test/format-test.cc
index d3d449a..6829f62 100644
--- a/test/format-test.cc
+++ b/test/format-test.cc
@@ -1577,10 +1577,11 @@
}
#endif
-TEST(FormatTest, MaxArgs) {
- EXPECT_EQ("0123456789abcde",
- fmt::format("{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}",
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'a', 'b', 'c', 'd', 'e'));
+TEST(FormatTest, UnpackedArgs) {
+ EXPECT_EQ("0123456789abcdefg",
+ fmt::format("{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}",
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'a', 'b', 'c', 'd', 'e',
+ 'f', 'g'));
}
#if FMT_USE_USER_DEFINED_LITERALS