Add support for more formattable types in ranges
This commit is contained in:
parent
4fd9a00f35
commit
60cd5ea3f2
@ -72,10 +72,11 @@ class is_streamable {
|
|||||||
template <typename T, typename Char>
|
template <typename T, typename Char>
|
||||||
struct is_streamable<
|
struct is_streamable<
|
||||||
T, Char,
|
T, Char,
|
||||||
enable_if_t<std::is_arithmetic<T>::value || std::is_array<T>::value ||
|
enable_if_t<
|
||||||
std::is_same<T, char8_type>::value ||
|
std::is_arithmetic<T>::value || std::is_array<T>::value ||
|
||||||
(std::is_convertible<T, int>::value &&
|
std::is_pointer<T>::value || std::is_same<T, char8_type>::value ||
|
||||||
!std::is_enum<T>::value)>> : std::false_type {};
|
(std::is_convertible<T, int>::value && !std::is_enum<T>::value)>>
|
||||||
|
: std::false_type {};
|
||||||
|
|
||||||
// Write the content of buf to os.
|
// Write the content of buf to os.
|
||||||
// It is a separate function rather than a part of vprint to simplify testing.
|
// It is a separate function rather than a part of vprint to simplify testing.
|
||||||
|
@ -582,9 +582,9 @@ struct formatter<
|
|||||||
T, Char,
|
T, Char,
|
||||||
enable_if_t<
|
enable_if_t<
|
||||||
fmt::is_range<T, Char>::value
|
fmt::is_range<T, Char>::value
|
||||||
// Workaround a bug in MSVC 2017 and earlier.
|
// Workaround a bug in MSVC 2019 and earlier.
|
||||||
#if !FMT_MSC_VER || FMT_MSC_VER >= 1927
|
#if !FMT_MSC_VER
|
||||||
&& (has_formatter<detail::value_type<T>, format_context>::value ||
|
&& (is_formattable<detail::value_type<T>, Char>::value ||
|
||||||
detail::has_fallback_formatter<detail::value_type<T>, Char>::value)
|
detail::has_fallback_formatter<detail::value_type<T>, Char>::value)
|
||||||
#endif
|
#endif
|
||||||
>> {
|
>> {
|
||||||
|
@ -190,7 +190,14 @@ TEST(ranges_test, range) {
|
|||||||
EXPECT_EQ(fmt::format("{}", z), "[0, 0, 0]");
|
EXPECT_EQ(fmt::format("{}", z), "[0, 0, 0]");
|
||||||
}
|
}
|
||||||
|
|
||||||
#if !FMT_MSC_VER || FMT_MSC_VER >= 1927
|
enum class test_enum { foo };
|
||||||
|
|
||||||
|
TEST(ranges_test, enum_range) {
|
||||||
|
auto v = std::vector<test_enum>{test_enum::foo};
|
||||||
|
EXPECT_EQ(fmt::format("{}", v), "[0]");
|
||||||
|
}
|
||||||
|
|
||||||
|
#if !FMT_MSC_VER
|
||||||
struct unformattable {};
|
struct unformattable {};
|
||||||
|
|
||||||
TEST(ranges_test, unformattable_range) {
|
TEST(ranges_test, unformattable_range) {
|
||||||
|
Loading…
Reference in New Issue
Block a user