Thanks, I installed the attached; it's what you sent, except in git
format-patch format, with the commit message equaling the ChangeLog
entry (with one empty line appended after the first line, and without
indentation), and with the first commit-message line trying to fit in 50
chars with a prefix indicating which module changed (admittedly a severe
budget). Gnulib has been conservative about keeping a ChangeLog file,
which puts a duplicate of the commit message into the patch, unfortunately.
From 9d46bcc16994bb9f45dcf4eeb89c429371159526 Mon Sep 17 00:00:00 2001
From: Pedro Alves <palves@redhat.com>
Date: Mon, 14 Nov 2016 23:08:21 +0000
Subject: [PATCH] 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.
---
ChangeLog | 15 +++++++++++++++
build-aux/snippet/c++defs.h | 9 +++++++++
lib/math.in.h | 12 +++++++-----
tests/test-math-c++.cc | 5 +++--
4 files changed, 34 insertions(+), 7 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index ea99978..e0490bd 100644
--- 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
diff --git a/build-aux/snippet/c++defs.h b/build-aux/snippet/c++defs.h
index 8fc95e3..b19a0be 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 9a194cb..e1dc970 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 f0f1448..cc7378c 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! */
--
2.7.4