From d49b7e12ad38b9e0a0f1e159d90d0025a4c4f896 Mon Sep 17 00:00:00 2001 From: Sergey Platonov Date: Tue, 27 Sep 2016 16:01:32 +0300 Subject: [PATCH] zxing::isnan implemented for different cases zxing::isnan for non msvc compilers was implemented with c99 function, which is still not fully supported by some compilers (e.g., gcc). I've added imlementation for compilers without c++11 or c99 support. And wraped all releated code in #if. --- src/zxing/zxing/ZXing.h | 35 ++++++++++++++++++++++++++--------- 1 file changed, 26 insertions(+), 9 deletions(-) diff --git a/src/zxing/zxing/ZXing.h b/src/zxing/zxing/ZXing.h index 99924e0..6d95f2d 100644 --- a/src/zxing/zxing/ZXing.h +++ b/src/zxing/zxing/ZXing.h @@ -41,16 +41,20 @@ namespace zxing { inline bool isnan_z(float v) {return std::isnan(v) != 0;} inline bool isnan_z(double v) {return std::isnan(v) != 0;} -inline float nan() {return std::numeric_limits::quiet_NaN();} } -#else - -//#include - +#elif (__cplusplus >= 201103L) +#include +namespace zxing { +inline bool isnan_z(float v) { + return std::isnan(v); +} +inline bool isnan_z(double v) { + return std::isnan(v); +} +} +#elif(__STDC_VERSION__ >= 199901L) #include - - namespace zxing { inline bool isnan_z(float v) { return isnan(v); @@ -58,11 +62,24 @@ inline bool isnan_z(float v) { inline bool isnan_z(double v) { return isnan(v); } -inline float nan() {return std::numeric_limits::quiet_NaN();} } - +#else +namespace zxing { +inline bool isnan_z(float v) { + volatile float d = v; + return d != d; +} +inline bool isnan_z(double v) { + volatile double d = v; + return d != d; +} +} #endif +namespace zxing { + inline float nan() {return std::numeric_limits::quiet_NaN();} +} + #if ZXING_DEBUG #include