Re: static_assert in G++

2019-01-10 Thread Bruno Haible
Reuben Thomas wrote:
> Would it be good to say something about "by default", so that future
> readers aren't confused as I was?

Comments are good. But we can't put all possible thoughts and considerations
into comments. Readers can look up the mailing list discussion, based on the
date of the commit.

OTOH, you are always free to adjust comments, when you feel that it's worth it.

Bruno




Re: static_assert in G++

2019-01-10 Thread Reuben Thomas
On Thu, 10 Jan 2019 at 20:08, Bruno Haible  wrote:

> 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


Thanks for the pointer!


> $ g++-version 6.5.0 -S foo1.cc
> $ g++-version 7.4.0 -S foo1.cc
> $ g++-version 8.2.0 -S foo1.cc
>

Good to know it now does work.

-   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.
>

Would it be good to say something about "by default", so that future
readers aren't confused as I was?

-- 
https://rrt.sc3d.org


Re: static_assert in G++

2019-01-10 Thread Bruno Haible
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  

verify: Enable _GL_HAVE_STATIC_ASSERT for recent G++ versions.
Reported by Reuben Thomas .
* 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