diff --git a/include/fmt/format.h b/include/fmt/format.h index 16b77fa5..abaf6320 100644 --- a/include/fmt/format.h +++ b/include/fmt/format.h @@ -3544,18 +3544,18 @@ FMT_CONSTEXPR internal::udl_arg operator"" _a(const wchar_t* s, #endif // FMT_USE_USER_DEFINED_LITERALS FMT_END_NAMESPACE -#define FMT_STRING_IMPL(s, ...) \ - [] { \ - /* Use a macro-like name to avoid shadowing warnings. */ \ - struct FMT_COMPILE_STRING : fmt::compile_string { \ - using char_type = fmt::remove_cvref_t; \ - __VA_ARGS__ FMT_CONSTEXPR \ - operator fmt::basic_string_view() const { \ - /* FMT_STRING only accepts string literals. */ \ - return fmt::internal::literal_to_view(s); \ - } \ - }; \ - return FMT_COMPILE_STRING(); \ +#define FMT_STRING_IMPL(s, ...) \ + []() -> fmt::basic_string_view> { \ + /* Use a macro-like name to avoid shadowing warnings. */ \ + struct FMT_COMPILE_STRING : fmt::compile_string { \ + using char_type = fmt::remove_cvref_t; \ + __VA_ARGS__ FMT_CONSTEXPR \ + operator fmt::basic_string_view() const { \ + /* FMT_STRING only accepts string literals. */ \ + return fmt::internal::literal_to_view(s); \ + } \ + }; \ + return FMT_COMPILE_STRING(); \ }() /** diff --git a/test/format-test.cc b/test/format-test.cc index 92ad5369..e271ef64 100644 --- a/test/format-test.cc +++ b/test/format-test.cc @@ -2570,3 +2570,13 @@ TEST(FormatTest, FormatUTF8Precision) { EXPECT_EQ(result.size(), 5); EXPECT_EQ(from_u8str(result), from_u8str(str.substr(0, 5))); } + +TEST(FormatTest, Issue1455) { +#if (__cplusplus >= 201703L) + if constexpr(true) { + EXPECT_EQ("foo", fmt::format(FMT_STRING("{}"), "foo")); + } else { + EXPECT_EQ("foo", fmt::format(FMT_STRING("{}"), "foo")); + } +#endif +}