fix formatter<char*> (#3432)

This commit is contained in:
timsong-cpp 2023-05-20 03:32:21 -10:00 committed by GitHub
parent d60b907f87
commit 08ef0d0842
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 17 additions and 1 deletions

View File

@ -2694,7 +2694,7 @@ struct formatter<T, Char,
template <typename Char> \ template <typename Char> \
struct formatter<Type, Char> : formatter<Base, Char> { \ struct formatter<Type, Char> : formatter<Base, Char> { \
template <typename FormatContext> \ template <typename FormatContext> \
auto format(const Type& val, FormatContext& ctx) const \ auto format(Type const& val, FormatContext& ctx) const \
-> decltype(ctx.out()) { \ -> decltype(ctx.out()) { \
return formatter<Base, Char>::format(static_cast<Base>(val), ctx); \ return formatter<Base, Char>::format(static_cast<Base>(val), ctx); \
} \ } \

View File

@ -2245,3 +2245,19 @@ TEST(format_test, format_named_arg_with_locale) {
} }
#endif // FMT_STATIC_THOUSANDS_SEPARATOR #endif // FMT_STATIC_THOUSANDS_SEPARATOR
struct convertible_to_nonconst_cstring {
operator char*() const {
static char c[]="bar";
return c;
}
};
FMT_BEGIN_NAMESPACE
template <> struct formatter<convertible_to_nonconst_cstring> : formatter<char*> {
};
FMT_END_NAMESPACE
TEST(format_test, formatter_nonconst_char) {
EXPECT_EQ(fmt::format("{}", convertible_to_nonconst_cstring()), "bar");
}