]> Savannah Git Hosting - gnulib.git/commitdiff
snippet/c++defs: fix real-floating arg functions in C++ mode
authorPedro Alves <palves@redhat.com>
Mon, 14 Nov 2016 23:08:21 +0000 (23:08 +0000)
committerPaul Eggert <eggert@cs.ucla.edu>
Tue, 15 Nov 2016 17:12:53 +0000 (09:12 -0800)
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.

ChangeLog
build-aux/snippet/c++defs.h
lib/math.in.h
tests/test-math-c++.cc

index ea9997887985377cc472a904e75a5fced2936a23..e0490bd523d5e3a02d654d9d0dfe85905ba83bf6 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -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
index 8fc95e37a9aade5634b91c0d8e02d47125b630dd..b19a0befa3d4c9f90d6b99c6541f2de4939c3b63 100644 (file)
 #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
index 9a194cbdac0b56f145604f66fcb19e6a557e35a6..e1dc97030fee3bc1b24c31a5184e6a1672962edf 100644 (file)
@@ -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)
index f0f14481abb34ddaa5669fe0b493791e6068ead4..cc7378c3a21f987d2ca92e7abeb7dc8057b4e473 100644 (file)
@@ -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!  */