diff options
author | Pierre Moreau <[email protected]> | 2016-04-14 20:43:00 +0200 |
---|---|---|
committer | Jose Fonseca <[email protected]> | 2016-04-18 11:10:25 +0100 |
commit | 649704f1f7c9e1d0990d34a76154b2eb656bee42 (patch) | |
tree | e1e332793aa292cec3d253a5e3a82696c8c93125 /include | |
parent | d3c98c73dc6547700e7c28f90019559f638b5d8c (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')
-rw-r--r-- | include/c99_math.h | 23 |
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_ */ |