diff --git a/include/fmt/format.h b/include/fmt/format.h index e8fe34c1..ceef2ef1 100644 --- a/include/fmt/format.h +++ b/include/fmt/format.h @@ -3221,7 +3221,8 @@ class format_string_checker { FMT_CONSTEXPR const Char* on_format_specs(int id, const Char* begin, const Char*) { advance_to(context_, begin); - return id < num_args ? parse_funcs_[id](context_) : begin; + // id >= 0 check is a workaround for gcc 10 bug (#2065). + return id >= 0 && id < num_args ? parse_funcs_[id](context_) : begin; } FMT_CONSTEXPR void on_error(const char* message) { diff --git a/test/format-test.cc b/test/format-test.cc index eecc0b05..81bc406f 100644 --- a/test/format-test.cc +++ b/test/format-test.cc @@ -1822,6 +1822,7 @@ static FMT_CONSTEXPR_DECL const char static_no_null[2] = {'{', '}'}; static FMT_CONSTEXPR_DECL const wchar_t static_no_null_wide[2] = {'{', '}'}; TEST(FormatTest, CompileTimeString) { + EXPECT_EQ("foo", fmt::format(FMT_STRING("foo"))); EXPECT_EQ("42", fmt::format(FMT_STRING("{}"), 42)); EXPECT_EQ(L"42", fmt::format(FMT_STRING(L"{}"), 42)); EXPECT_EQ("foo", fmt::format(FMT_STRING("{}"), string_like()));