Hi Reuben, > verify: Fix syntax error with GCC 4.6 in C++ mode. > > This is odd, since the GCC web page on C++11 support: > https://gcc.gnu.org/projects/cxx-status.html#cxx11 > > says that static assertions have been supported for C++ since GCC 4.3:
See the discussion on the mailing list: https://lists.gnu.org/archive/html/bug-gnulib/2011-04/msg00115.html Continuing with the next versions of g++: $ g++-version 4.3.6 -S foo1.cc foo1.cc:2: error: expected constructor, destructor, or type conversion before '(' token $ g++-version 4.4.7 -S foo1.cc foo1.cc:2: error: expected constructor, destructor, or type conversion before '(' token $ g++-version 4.5.4 -S foo1.cc foo1.cc:2:15: error: expected constructor, destructor, or type conversion before '(' token $ g++-version 4.6.4 -S foo1.cc foo1.cc:2:15: error: expected constructor, destructor, or type conversion before '(' token $ g++-version 4.7.3 -S foo1.cc foo1.cc:2:15: error: expected constructor, destructor, or type conversion before '(' token $ g++-version 4.8.5 -S foo1.cc foo1.cc:2:15: error: expected constructor, destructor, or type conversion before '(' token static_assert (sizeof (long) > 1, "long too small"); ^ $ g++-version 4.9.4 -S foo1.cc foo1.cc:2:15: error: expected constructor, destructor, or type conversion before '(' token static_assert (sizeof (long) > 1, "long too small"); ^ $ g++-version 5.5.0 -S foo1.cc foo1.cc:2:15: error: expected constructor, destructor, or type conversion before '(' token static_assert (sizeof (long) > 1, "long too small"); ^ $ g++-version 6.5.0 -S foo1.cc $ g++-version 7.4.0 -S foo1.cc $ g++-version 8.2.0 -S foo1.cc I'm therefore applying this patch: 2019-01-10 Bruno Haible <br...@clisp.org> verify: Enable _GL_HAVE_STATIC_ASSERT for recent G++ versions. Reported by Reuben Thomas <r...@sc3d.org>. * lib/verify.h (_GL_HAVE_STATIC_ASSERT): Define for g++ versions >= 6. diff --git a/lib/verify.h b/lib/verify.h index b2e5f64..6930645 100644 --- a/lib/verify.h +++ b/lib/verify.h @@ -26,7 +26,7 @@ here generates easier-to-read diagnostics when verify (R) fails. Define _GL_HAVE_STATIC_ASSERT to 1 if static_assert works as per C++11. - This will likely be supported by future GCC versions, in C++ mode. + This is supported by GCC 6.1.0 and later, in C++ mode. Use this only with GCC. If we were willing to slow 'configure' down we could also use it with other compilers, but since this @@ -36,9 +36,7 @@ && !defined __cplusplus) # define _GL_HAVE__STATIC_ASSERT 1 #endif -/* The condition (99 < __GNUC__) is temporary, until we know about the - first G++ release that supports static_assert. */ -#if (99 < __GNUC__) && defined __cplusplus +#if (6 <= __GNUC__) && defined __cplusplus # define _GL_HAVE_STATIC_ASSERT 1 #endif