mirror of
https://github.com/fmtlib/fmt.git
synced 2024-12-27 03:21:34 +00:00
Fix handling of implicit conversion to integral types larger than int (#507)
This commit is contained in:
parent
c56d345985
commit
07ed421521
11
fmt/format.h
11
fmt/format.h
@ -1395,14 +1395,9 @@ class MakeValue : public Arg {
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
MakeValue(const T &value,
|
||||
typename EnableIf<ConvertToInt<T>::value, int>::type = 0) {
|
||||
int_value = value;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
static uint64_t type(const T &) {
|
||||
return ConvertToInt<T>::value ? Arg::INT : Arg::CUSTOM;
|
||||
static typename EnableIf<Not<ConvertToInt<T>::value>::value, uint64_t>::type
|
||||
type(const T &) {
|
||||
return Arg::CUSTOM;
|
||||
}
|
||||
|
||||
// Additional template param `Char_` is needed here because make_type always
|
||||
|
@ -1234,6 +1234,16 @@ TEST(FormatterTest, FormatIntLocale) {
|
||||
EXPECT_EQ("1--234--567", format("{:n}", 1234567));
|
||||
}
|
||||
|
||||
struct ConvertibleToLongLong {
|
||||
operator fmt::LongLong() const {
|
||||
return fmt::LongLong(1) << 32;
|
||||
}
|
||||
};
|
||||
|
||||
TEST(FormatterTest, FormatConvertibleToLongLong) {
|
||||
EXPECT_EQ("100000000", format("{:x}", ConvertibleToLongLong()));
|
||||
}
|
||||
|
||||
TEST(FormatterTest, FormatFloat) {
|
||||
EXPECT_EQ("392.500000", format("{0:f}", 392.5f));
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user