Building a testdir on FreeBSD 11, I get this compilation error:
c++ -DHAVE_CONFIG_H -DEXEEXT=\"\" -DEXEEXT=\"\" -I. -I../../gltests -I..
-DGNULIB_STRICT_CHECKING=1 -DIN_GNULIB_TESTS=1 -I. -I../../gltests -I..
-I../../gltests/.. -I../gllib -I../../gltests/../gllib -I/home/bruno/include
-Wall -D_THREAD_SAFE -Wno-error -g -O2 -MT test-assert-h-c++.o -MD -MP -MF
$depbase.Tpo -c -o test-assert-h-c++.o ../../gltests/test-assert-h-c++.cc &&\
mv -f $depbase.Tpo $depbase.Po
../../gltests/test-assert-h-c++.cc:30:26: error: too few arguments provided to
function-like macro invocation
static_assert (2 + 2 == 4);
^
/usr/include/c++/v1/__config:631:9: note: macro 'static_assert' defined here
#define static_assert(__b, __m) \
^
../../gltests/test-assert-h-c++.cc:30:1: error: C++ requires a type specifier
for all declarations
static_assert (2 + 2 == 4);
^
2 errors generated.
gmake[4]: *** [Makefile:28200: test-assert-h-c++.o] Error 1
c++ is clang version 3.8.0.
This patch fixes it.
2024-12-28 Bruno Haible <[email protected]>
assert-h, verify: Make static_assert work in C++ mode on FreeBSD 11.
* lib/verify.h (static_assert): Override when using old versions of
clang++.
diff --git a/lib/verify.h b/lib/verify.h
index 49a73c0508..c4b6d50384 100644
--- a/lib/verify.h
+++ b/lib/verify.h
@@ -255,6 +255,11 @@ template <int w>
# endif
# endif
/* Define static_assert if needed. */
+# if defined __cplusplus && defined __clang__ && __clang_major__ < 9
+/* clang++ before commit 5c739665a8721228cf6143fd4ef95870a59f55ae had a
+ two-arguments static_assert but not the one-argument static_assert. */
+# undef static_assert
+# endif
# if (!defined static_assert \
&& __STDC_VERSION__ < 202311 \
&& (!defined __cplusplus \