This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH 2/2] Use static_assert for STATIC_ASSERT for C++11 onwards
- From: David Malcolm <dmalcolm at redhat dot com>
- To: Richard Biener <richard dot guenther at gmail dot com>, Jakub Jelinek <jakub at redhat dot com>
- Cc: Marek Polacek <polacek at redhat dot com>, GCC Patches <gcc-patches at gcc dot gnu dot org>, David Malcolm <dmalcolm at redhat dot com>
- Date: Tue, 26 Jul 2016 19:19:39 -0400
- Subject: [PATCH 2/2] Use static_assert for STATIC_ASSERT for C++11 onwards
- Authentication-results: sourceware.org; auth=none
- References: <CAFiYyc0Kj6wj3PN_28ge1kpF5hemJiC=EWipSntEOBqnPbmtKw@mail.gmail.com> <1469575179-53321-1-git-send-email-dmalcolm@redhat.com>
C++11 has a
static_assert (COND, MESSAGE)
which gives more readable error messages for STATIC_ASSERT than our
current implementation.
This patch makes us use it if __cplusplus >= 201103L
There's also a provisional static_assert (COND) in C++1z, but presumably
we should wait until that one is fully standardized before using it.
Bootstrapped®rtested on x86_64-pc-linux-gnu (in conjunction
with the previous patch)
OK for trunk?
gcc/ChangeLog:
* system.h (STATIC_ASSERT): Use static_assert if building
with C++11 onwards.
---
gcc/system.h | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/gcc/system.h b/gcc/system.h
index 78a7da6..8a17197 100644
--- a/gcc/system.h
+++ b/gcc/system.h
@@ -752,9 +752,14 @@ extern void fancy_abort (const char *, int, const char *) ATTRIBUTE_NORETURN;
#define STATIC_CONSTANT_P(X) (false && (X))
#endif
-/* Until we can use C++11's static_assert. */
+/* static_assert (COND, MESSAGE) is available in C++11 onwards. */
+#if __cplusplus >= 201103L
+#define STATIC_ASSERT(X) \
+ static_assert ((X), #X)
+#else
#define STATIC_ASSERT(X) \
typedef int assertion1[(X) ? 1 : -1] ATTRIBUTE_UNUSED
+#endif
/* Provide a fake boolean type. We make no attempt to use the
C99 _Bool, as it may not be available in the bootstrap compiler,
--
1.8.5.3