diff --git a/format.cc b/format.cc index 9d05991d..f2a01fcb 100644 --- a/format.cc +++ b/format.cc @@ -762,7 +762,7 @@ inline Arg fmt::BasicFormatter::parse_arg_name(const Char *&s) { Char c; do { c = *++s; - } while (('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z') || ('0' <= c && c <= '9')); + } while (is_name_start(c) || ('0' <= c && c <= '9')); const char *error = 0; Arg arg = get_arg(fmt::BasicStringRef(start, s - start), error); if (error) diff --git a/test/format-test.cc b/test/format-test.cc index 4a9e1574..5e2e153a 100644 --- a/test/format-test.cc +++ b/test/format-test.cc @@ -610,8 +610,9 @@ TEST(FormatterTest, ManyArgs) { #endif TEST(FormatterTest, NamedArg) { + EXPECT_EQ("1/a/A", format("{_1}/{a_}/{A_}", fmt::arg("a_", 'a'), fmt::arg("A_", "A"), fmt::arg("_1", 1))); char a = 'A', b = 'B', c = 'C'; - EXPECT_EQ("BBAACC", format("{1}{b}{0}{a}{2}{c}", FMT_CAPTURE(a, b, c))); + EXPECT_EQ("BB/AA/CC", format("{1}{b}/{0}{a}/{2}{c}", FMT_CAPTURE(a, b, c))); EXPECT_EQ(" A", format("{a:>2}", FMT_CAPTURE(a))); EXPECT_THROW_MSG(format("{a+}", FMT_CAPTURE(a)), FormatError, "missing '}' in format string"); EXPECT_THROW_MSG(format("{a}"), FormatError, "argument not found");