From: Pedro Alves Date: Mon, 14 Nov 2016 23:08:21 +0000 (+0000) Subject: snippet/c++defs: fix real-floating arg functions in C++ mode X-Git-Tag: v1.0~6552 X-Git-Url: https://gitweb.git.savannah.gnu.org/gitweb/?a=commitdiff_plain;h=c907efdb0747b408dd4d3dfbc9edf7c4086c9b51;p=gnulib.git 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. --- diff --git a/ChangeLog b/ChangeLog index ea99978879..e0490bd523 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,18 @@ +2016-11-14 Pedro Alves + + 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 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(func) + = static_cast(GNULIB_NAMESPACE::func) /* Keep these checks in the same order as math.in.h! */