summaryrefslogtreecommitdiffstats
path: root/include/c99_math.h
diff options
context:
space:
mode:
authorPierre Moreau <[email protected]>2016-04-14 20:43:00 +0200
committerJose Fonseca <[email protected]>2016-04-18 11:10:25 +0100
commit649704f1f7c9e1d0990d34a76154b2eb656bee42 (patch)
treee1e332793aa292cec3d253a5e3a82696c8c93125 /include/c99_math.h
parentd3c98c73dc6547700e7c28f90019559f638b5d8c (diff)
math: Import isinf and others to global namespace
Starting from C++11, several math functions, like isinf, moved into the std namespace. Since cmath undefines those functions before redefining them inside the namespace, and glibc 2.23 defines the C variants as macros, the C variants in global namespace are not accessible any longer. v2: Move the fix outside of Nouveau, as suggested by Jose Fonseca, since anyone might need it when GCC switches to C++14 by default with GCC 6.0. v3: * Put the code directly inside c99_math.h rather than creating a new header file, as asked by Jose Fonseca; * Guard the code behind glibc version checks, as only glibc > =2.23 defines isinf & co. as functions, as suggested by Jose Fonseca. Signed-off-by: Pierre Moreau <[email protected]> Signed-off-by: Jose Fonseca <[email protected]>
Diffstat (limited to 'include/c99_math.h')
-rw-r--r--include/c99_math.h23
1 files changed, 23 insertions, 0 deletions
diff --git a/include/c99_math.h b/include/c99_math.h
index 250e08d44cf..e906c26aa54 100644
--- a/include/c99_math.h
+++ b/include/c99_math.h
@@ -185,4 +185,27 @@ fpclassify(double x)
#endif
+/* Since C++11, the following functions are part of the std namespace. Their C
+ * counteparts should still exist in the global namespace, however cmath
+ * undefines those functions, which in glibc 2.23, are defined as macros rather
+ * than functions as in glibc 2.22.
+ */
+#if __cplusplus >= 201103L && (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 23))
+#include <cmath>
+
+using std::fpclassify;
+using std::isfinite;
+using std::isinf;
+using std::isnan;
+using std::isnormal;
+using std::signbit;
+using std::isgreater;
+using std::isgreaterequal;
+using std::isless;
+using std::islessequal;
+using std::islessgreater;
+using std::isunordered;
+#endif
+
+
#endif /* #define _C99_MATH_H_ */