mirror of
https://github.com/fmtlib/fmt.git
synced 2024-12-24 12:14:26 +00:00
Fix ambiguous instantiation with formatter in fmt/ostream.h (#830)
This commit is contained in:
parent
0f04ec68a9
commit
8b9fb9fb7e
@ -68,9 +68,7 @@ class is_streamable {
|
|||||||
typedef decltype(test<T>(0)) result;
|
typedef decltype(test<T>(0)) result;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
// std::string operator<< is not considered user-defined because we handle strings
|
static const bool value = result::value;
|
||||||
// specially.
|
|
||||||
static const bool value = result::value && !std::is_same<T, std::string>::value;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// Disable conversion to int if T has an overloaded operator<< which is a free
|
// Disable conversion to int if T has an overloaded operator<< which is a free
|
||||||
@ -111,7 +109,10 @@ void format_value(basic_buffer<Char> &buffer, const T &value) {
|
|||||||
// Formats an object of type T that has an overloaded ostream operator<<.
|
// Formats an object of type T that has an overloaded ostream operator<<.
|
||||||
template <typename T, typename Char>
|
template <typename T, typename Char>
|
||||||
struct formatter<T, Char,
|
struct formatter<T, Char,
|
||||||
typename std::enable_if<internal::is_streamable<T, Char>::value>::type>
|
typename std::enable_if<
|
||||||
|
internal::is_streamable<T, Char>::value &&
|
||||||
|
!internal::format_type<
|
||||||
|
typename buffer_context<Char>::type, T>::value>::type>
|
||||||
: formatter<basic_string_view<Char>, Char> {
|
: formatter<basic_string_view<Char>, Char> {
|
||||||
|
|
||||||
template <typename Context>
|
template <typename Context>
|
||||||
|
@ -191,3 +191,10 @@ TEST(FormatTest, FormatToN) {
|
|||||||
EXPECT_EQ(buffer + 3, result.out);
|
EXPECT_EQ(buffer + 3, result.out);
|
||||||
EXPECT_EQ("xABx", fmt::string_view(buffer, 4));
|
EXPECT_EQ("xABx", fmt::string_view(buffer, 4));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if FMT_USE_USER_DEFINED_LITERALS
|
||||||
|
TEST(FormatTest, UDL) {
|
||||||
|
using namespace fmt::literals;
|
||||||
|
EXPECT_EQ("{}"_format("test"), "test");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user