+2023-02-04 Bruno Haible <bruno@clisp.org>
+
+ assert-h, verify: Fix conflict with standard C++ header files on macOS.
+ * lib/verify.h (_Static_assert): Don't redefine with clang ≥ 3.8.0
+ in C++ mode.
+ * tests/test-assert-h-c++.cc: Also check against conflict with the
+ standard C++ header files.
+ * tests/test-assert-h-c++2.cc: Likewise.
+
2023-02-03 Bruno Haible <bruno@clisp.org>
relocatable-prog: Fix compiler warning.
/* _GL_STATIC_ASSERT_H is defined if this code is copied into assert.h. */
#ifdef _GL_STATIC_ASSERT_H
-# if !defined _GL_HAVE__STATIC_ASSERT1 && !defined _Static_assert
+/* Define _Static_assert if needed. */
+/* With clang ≥ 3.8.0 in C++ mode, _Static_assert already works and accepts
+ 1 or 2 arguments. We better don't override it, because clang's standard
+ C++ library uses static_assert inside classes in several places, and our
+ replacement via _GL_VERIFY does not work in these contexts. */
+# if (defined __cplusplus && defined __clang__ \
+ && (4 <= __clang_major__ + (8 <= __clang_minor__)))
+# if 5 <= __clang_major__
+/* Avoid "warning: 'static_assert' with no message is a C++17 extension". */
+# pragma clang diagnostic ignored "-Wc++17-extensions"
+# else
+/* Avoid "warning: static_assert with no message is a C++1z extension". */
+# pragma clang diagnostic ignored "-Wc++1z-extensions"
+# endif
+# elif !defined _GL_HAVE__STATIC_ASSERT1 && !defined _Static_assert
# if !defined _MSC_VER || defined __clang__
# define _Static_assert(...) \
_GL_VERIFY (__VA_ARGS__, "static assertion failed", -)
_GL_VERIFY ((R), "static assertion failed", -)
# endif
# endif
+/* Define static_assert if needed. */
# if (!defined static_assert \
&& (!defined __cplusplus \
|| (__cpp_static_assert < 201411 \
/* Test of <assert.h> substitute in C++ mode.
- Copyright (C) 2019-2022 Free Software Foundation, Inc.
+ Copyright (C) 2019-2023 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
#include <assert.h>
+/* Check against conflicts between <assert.h> and the C++ header files. */
+#include <stddef.h>
+#include <iostream>
+
int
main ()
/* Test of <assert.h> substitute in C++ mode.
- Copyright (C) 2019-2022 Free Software Foundation, Inc.
+ Copyright (C) 2019-2023 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
#include <config.h>
#include <cassert>
+
+/* Check against conflicts between <cassert> and other C++ header files. */
+#include <stddef.h>
+#include <iostream>