diff options
author | Pedro Alves <palves@redhat.com> | 2016-11-14 23:08:21 +0000 |
---|---|---|
committer | Paul Eggert <eggert@cs.ucla.edu> | 2016-11-15 09:12:53 -0800 |
commit | c907efdb0747b408dd4d3dfbc9edf7c4086c9b51 (patch) | |
tree | 5ad0c54bd5218917478883344f83395501d18ef9 | |
parent | c3b131294aa42b7997cc9b9a0bbb2934aa27fd6c (diff) | |
download | gnulib-c907efdb0747b408dd4d3dfbc9edf7c4086c9b51.tar.gz |
snippet/c++defs: fix real-floating arg functions in C++ mode
Also, define isfinite, isinf, isnan, signbit in the gnulib
namespace instead of in the global namespace.
* build-aux/snippet/c++defs.h (_GL_BEGIN_NAMESPACE)
(_GL_END_NAMESPACE): New.
* lib/math.in.h (_GL_MATH_CXX_REAL_FLOATING_DECL_2): Use them.
(isfinite, isinf, isnan, signbit) [__cplusplus &&
GNULIB_NAMESPACE]: Define them in the GNULIB_NAMESPACE namespace
instead of in the global namespace.
* tests/test-math-c++.cc: Check that the isfinite, isinf, isnan,
signbit overloads exist in the GNULIB_NAMESPACE namespace, instead
of in the global namespace.
-rw-r--r-- | ChangeLog | 15 | ||||
-rw-r--r-- | build-aux/snippet/c++defs.h | 9 | ||||
-rw-r--r-- | lib/math.in.h | 12 | ||||
-rw-r--r-- | tests/test-math-c++.cc | 5 |
4 files changed, 34 insertions, 7 deletions
@@ -1,3 +1,18 @@ +2016-11-14 Pedro Alves <palves@redhat.com> + + snippet/c++defs: fix real-floating arg functions in C++ mode + Also, define isfinite, isinf, isnan, signbit in the gnulib + namespace instead of in the global namespace. + * build-aux/snippet/c++defs.h (_GL_BEGIN_NAMESPACE) + (_GL_END_NAMESPACE): New. + * lib/math.in.h (_GL_MATH_CXX_REAL_FLOATING_DECL_2): Use them. + (isfinite, isinf, isnan, signbit) [__cplusplus && + GNULIB_NAMESPACE]: Define them in the GNULIB_NAMESPACE namespace + instead of in the global namespace. + * tests/test-math-c++.cc: Check that the isfinite, isinf, isnan, + signbit overloads exist in the GNULIB_NAMESPACE namespace, instead + of in the global namespace. + 2016-11-13 Jim Meyering <meyering@fb.com> strftime: don't use __THROW diff --git a/build-aux/snippet/c++defs.h b/build-aux/snippet/c++defs.h index 8fc95e37a9..b19a0befa3 100644 --- a/build-aux/snippet/c++defs.h +++ b/build-aux/snippet/c++defs.h @@ -17,6 +17,15 @@ #ifndef _GL_CXXDEFS_H #define _GL_CXXDEFS_H +/* Begin/end the GNULIB_NAMESPACE namespace. */ +#if defined __cplusplus && defined GNULIB_NAMESPACE +# define _GL_BEGIN_NAMESPACE namespace GNULIB_NAMESPACE { +# define _GL_END_NAMESPACE } +#else +# define _GL_BEGIN_NAMESPACE +# define _GL_END_NAMESPACE +#endif + /* The three most frequent use cases of these macros are: * For providing a substitute for a function that is missing on some diff --git a/lib/math.in.h b/lib/math.in.h index 9a194cbdac..e1dc97030f 100644 --- a/lib/math.in.h +++ b/lib/math.in.h @@ -63,6 +63,7 @@ _gl_cxx_ ## func ## l (long double l) \ return func (l); \ } # define _GL_MATH_CXX_REAL_FLOATING_DECL_2(func) \ +_GL_BEGIN_NAMESPACE \ inline int \ func (float f) \ { \ @@ -77,7 +78,8 @@ inline int \ func (long double l) \ { \ return _gl_cxx_ ## func ## l (l); \ -} +} \ +_GL_END_NAMESPACE #endif /* Helper macros to define a portability warning for the @@ -2044,7 +2046,7 @@ _GL_EXTERN_C int gl_isfinitel (long double x); gl_isfinitef (x)) # endif # ifdef __cplusplus -# ifdef isfinite +# if defined isfinite || defined GNULIB_NAMESPACE _GL_MATH_CXX_REAL_FLOATING_DECL_1 (isfinite) # undef isfinite _GL_MATH_CXX_REAL_FLOATING_DECL_2 (isfinite) @@ -2071,7 +2073,7 @@ _GL_EXTERN_C int gl_isinfl (long double x); gl_isinff (x)) # endif # ifdef __cplusplus -# ifdef isinf +# if defined isinf || defined GNULIB_NAMESPACE _GL_MATH_CXX_REAL_FLOATING_DECL_1 (isinf) # undef isinf _GL_MATH_CXX_REAL_FLOATING_DECL_2 (isinf) @@ -2189,7 +2191,7 @@ _GL_EXTERN_C int rpl_isnanl (long double x) _GL_ATTRIBUTE_CONST; __builtin_isnanf ((float)(x))) # endif # ifdef __cplusplus -# ifdef isnan +# if defined isnan || defined GNULIB_NAMESPACE _GL_MATH_CXX_REAL_FLOATING_DECL_1 (isnan) # undef isnan _GL_MATH_CXX_REAL_FLOATING_DECL_2 (isnan) @@ -2264,7 +2266,7 @@ _GL_EXTERN_C int gl_signbitl (long double arg); gl_signbitf (x)) # endif # ifdef __cplusplus -# ifdef signbit +# if defined signbit || defined GNULIB_NAMESPACE _GL_MATH_CXX_REAL_FLOATING_DECL_1 (signbit) # undef signbit _GL_MATH_CXX_REAL_FLOATING_DECL_2 (signbit) diff --git a/tests/test-math-c++.cc b/tests/test-math-c++.cc index f0f14481ab..cc7378c3a2 100644 --- a/tests/test-math-c++.cc +++ b/tests/test-math-c++.cc @@ -24,7 +24,8 @@ #include "signature.h" /* Signature check for a function that takes a real-floating argument. - Check that each overloaded function with the specified signature exists. */ + Check that each overloaded function with the specified signature + exists in the GNULIB_NAMESPACE namespace. */ #define REAL_FLOATING_CHECK(func,\ rettype1, parameters1,\ rettype2, parameters2,\ @@ -34,7 +35,7 @@ OVERLOADED_CHECK (func, rettype3, parameters3, _3) #define OVERLOADED_CHECK(func, rettype, parameters, suffix) \ static rettype (* _GL_UNUSED signature_check_ ## func ## suffix) parameters \ - = static_cast<rettype(*)parameters>(func) + = static_cast<rettype(*)parameters>(GNULIB_NAMESPACE::func) /* Keep these checks in the same order as math.in.h! */ |