Fix incorrect call to on_align in '{:}=' (#750)

This commit is contained in:
Victor Zverovich 2018-05-26 09:23:09 -07:00
parent fba352a92a
commit e2cd521b8f
2 changed files with 35 additions and 33 deletions

View File

@ -1975,8 +1975,11 @@ struct precision_adapter {
template <typename Iterator, typename SpecHandler> template <typename Iterator, typename SpecHandler>
FMT_CONSTEXPR Iterator parse_format_specs(Iterator it, SpecHandler &&handler) { FMT_CONSTEXPR Iterator parse_format_specs(Iterator it, SpecHandler &&handler) {
typedef typename std::iterator_traits<Iterator>::value_type char_type; typedef typename std::iterator_traits<Iterator>::value_type char_type;
char_type c = *it;
if (c == '}' || !c)
return it;
// Parse fill and alignment. // Parse fill and alignment.
if (char_type c = *it) {
alignment align = ALIGN_DEFAULT; alignment align = ALIGN_DEFAULT;
int i = 1; int i = 1;
do { do {
@ -1996,9 +1999,7 @@ FMT_CONSTEXPR Iterator parse_format_specs(Iterator it, SpecHandler &&handler) {
break; break;
} }
if (align != ALIGN_DEFAULT) { if (align != ALIGN_DEFAULT) {
handler.on_align(align);
if (p != it) { if (p != it) {
if (c == '}') break;
if (c == '{') { if (c == '{') {
handler.on_error("invalid fill character '{'"); handler.on_error("invalid fill character '{'");
return it; return it;
@ -2006,10 +2007,10 @@ FMT_CONSTEXPR Iterator parse_format_specs(Iterator it, SpecHandler &&handler) {
it += 2; it += 2;
handler.on_fill(c); handler.on_fill(c);
} else ++it; } else ++it;
handler.on_align(align);
break; break;
} }
} while (--i >= 0); } while (--i >= 0);
}
// Parse sign. // Parse sign.
switch (*it) { switch (*it) {

View File

@ -435,6 +435,7 @@ TEST(FormatterTest, Fill) {
EXPECT_EQ("c****", format("{0:*<5}", 'c')); EXPECT_EQ("c****", format("{0:*<5}", 'c'));
EXPECT_EQ("abc**", format("{0:*<5}", "abc")); EXPECT_EQ("abc**", format("{0:*<5}", "abc"));
EXPECT_EQ("**0xface", format("{0:*>8}", reinterpret_cast<void*>(0xface))); EXPECT_EQ("**0xface", format("{0:*>8}", reinterpret_cast<void*>(0xface)));
EXPECT_EQ("foo=", format("{:}=", "foo"));
} }
TEST(FormatterTest, PlusSign) { TEST(FormatterTest, PlusSign) {