diff options
author | Kenneth Heafield <github@kheafield.com> | 2017-04-11 12:48:49 +0300 |
---|---|---|
committer | Kenneth Heafield <github@kheafield.com> | 2017-04-11 12:48:49 +0300 |
commit | f3243eaff1366c7c60263ec0d21c9bfe4ab3591c (patch) | |
tree | ce54c36201ede01cd99ae8271523bea820982713 /util | |
parent | c8ef1e3191ceb57b49fabe092fdaf73f3032d0c4 (diff) |
Change isnan handing to only use math.h on windows. Fixes #85.
Diffstat (limited to 'util')
-rw-r--r-- | util/file_piece.cc | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/util/file_piece.cc b/util/file_piece.cc index 8f6278f..79fd5a7 100644 --- a/util/file_piece.cc +++ b/util/file_piece.cc @@ -23,7 +23,9 @@ #include <sys/types.h> #include <sys/stat.h> +#if defined(_WIN32) || defined(_WIN64) #include <math.h> +#endif namespace util { @@ -174,19 +176,25 @@ StringPiece FirstToken(StringPiece str) { return StringPiece(str.data(), i - str.data()); } +// std::isnan is technically C++11 not C++98. But in practice this is a problem for visual studio. +template <class T> inline int CrossPlatformIsNaN(T value) { +#if defined(_WIN32) || defined(_WIN64) + return isnan(value); +#else + return std::isnan(value); +#endif +} + const char *ParseNumber(StringPiece str, float &out) { int count; out = kConverter.StringToFloat(str.data(), str.size(), &count); - // std::isnan is C++11, not C++98 - using namespace std; - UTIL_THROW_IF_ARG(isnan(out) && str != "NaN" && str != "nan", ParseNumberException, (FirstToken(str)), "float"); + UTIL_THROW_IF_ARG(CrossPlatformIsNaN(out) && str != "NaN" && str != "nan", ParseNumberException, (FirstToken(str)), "float"); return str.data() + count; } const char *ParseNumber(StringPiece str, double &out) { int count; out = kConverter.StringToDouble(str.data(), str.size(), &count); - using namespace std; - UTIL_THROW_IF_ARG(isnan(out) && str != "NaN" && str != "nan", ParseNumberException, (FirstToken(str)), "double"); + UTIL_THROW_IF_ARG(CrossPlatformIsNaN(out) && str != "NaN" && str != "nan", ParseNumberException, (FirstToken(str)), "double"); return str.data() + count; } const char *ParseNumber(StringPiece str, long int &out) { |