Fix MSVC build.

This commit is contained in:
Victor Zverovich 2014-07-29 09:14:07 -07:00
parent d346a4120d
commit be785a8a43

View File

@ -63,11 +63,16 @@ namespace {
#ifndef _MSC_VER #ifndef _MSC_VER
// Portable version of signbit.
// When compiled in C++11 mode signbit is no longer a macro but a function // When compiled in C++11 mode signbit is no longer a macro but a function
// defined in namespace std and the macro is undefined. // defined in namespace std and the macro is undefined.
#ifndef signbit inline int getsign(double x) {
using std::signbit; #ifdef signbit
return signbit(x);
#else
return std::signbit(x);
#endif #endif
}
// Portable version of isinf. // Portable version of isinf.
inline int isinfinity(double x) { inline int isinfinity(double x) {
@ -82,7 +87,7 @@ inline int isinfinity(double x) {
#else // _MSC_VER #else // _MSC_VER
inline int signbit(double value) { inline int getsign(double value) {
if (value < 0) return 1; if (value < 0) return 1;
if (value == value) return 0; if (value == value) return 0;
int dec = 0, sign = 0; int dec = 0, sign = 0;
@ -210,7 +215,7 @@ inline Arg::StringValue<wchar_t> ignore_incompatible_str(
Arg::StringValue<wchar_t> s) { return s; } Arg::StringValue<wchar_t> s) { return s; }
} // namespace } // namespace
int fmt::internal::signbit_noinline(double value) { return signbit(value); } int fmt::internal::signbit_noinline(double value) { return getsign(value); }
void fmt::SystemError::init( void fmt::SystemError::init(
int error_code, StringRef format_str, const ArgList &args) { int error_code, StringRef format_str, const ArgList &args) {
@ -527,9 +532,9 @@ void fmt::BasicWriter<Char>::write_double(T value, const FormatSpec &spec) {
} }
char sign = 0; char sign = 0;
// Use signbit instead of value < 0 because the latter is always // Use getsign instead of value < 0 because the latter is always
// false for NaN. // false for NaN.
if (signbit(static_cast<double>(value))) { if (getsign(static_cast<double>(value))) {
sign = '-'; sign = '-';
value = -value; value = -value;
} else if (spec.flag(SIGN_FLAG)) { } else if (spec.flag(SIGN_FLAG)) {