Remove old msvc workaround from arg_formatter_base and fix warning

This commit is contained in:
Victor Zverovich 2019-06-12 18:14:56 -07:00
parent d32fe0f3f6
commit d05d42751c
2 changed files with 20 additions and 14 deletions

View File

@ -1423,20 +1423,24 @@ class arg_formatter_base {
return out();
}
template <typename T, FMT_ENABLE_IF(std::is_integral<T>::value ||
std::is_same<T, char_type>::value)>
template <typename T, FMT_ENABLE_IF(std::is_integral<T>::value)>
iterator operator()(T value) {
// MSVC2013 fails to compile separate overloads for bool and char_type so
// use std::is_same instead.
if (std::is_same<T, bool>::value) {
if (specs_ && specs_->type) return (*this)(value ? 1 : 0);
write(value != 0);
} else if (std::is_same<T, char_type>::value) {
internal::handle_char_specs(
specs_, char_spec_handler(*this, static_cast<char_type>(value)));
} else {
specs_ ? writer_.write_int(value, *specs_) : writer_.write(value);
}
if (specs_)
writer_.write_int(value, *specs_);
else
writer_.write(value);
return out();
}
iterator operator()(char_type value) {
internal::handle_char_specs(
specs_, char_spec_handler(*this, static_cast<char_type>(value)));
return out();
}
iterator operator()(bool value) {
if (specs_ && specs_->type) return (*this)(value ? 1 : 0);
write(value != 0);
return out();
}

View File

@ -2494,7 +2494,9 @@ TEST(FormatTest, CharTraitsIsNotAmbiguous) {
struct mychar {
int value;
mychar() = default;
mychar(char val) : value(val) {}
template <typename T> mychar(T val) : value(static_cast<int>(val)) {}
operator int() const { return value; }
};