From 93adbf7bfa7afc1c8e25b037fce8227f3a225639 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Tue, 30 Aug 2016 12:00:00 -0400 Subject: [PATCH v3] Add support for static assertions in C++ This allows modules written in C++ to use or include header files that use StaticAssertStmt() etc. --- src/include/c.h | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/include/c.h b/src/include/c.h index af799dc1df..e238edb7d1 100644 --- a/src/include/c.h +++ b/src/include/c.h @@ -749,6 +749,7 @@ typedef NameData *Name; * about a negative width for a struct bit-field. This will not include a * helpful error message, but it beats not getting an error at all. */ +#ifndef __cplusplus #ifdef HAVE__STATIC_ASSERT #define StaticAssertStmt(condition, errmessage) \ do { _Static_assert(condition, errmessage); } while(0) @@ -760,6 +761,18 @@ typedef NameData *Name; #define StaticAssertExpr(condition, errmessage) \ StaticAssertStmt(condition, errmessage) #endif /* HAVE__STATIC_ASSERT */ +#else /* C++ */ +#if defined(__cpp_static_assert) && __cpp_static_assert >= 200410 +#define StaticAssertStmt(condition, errmessage) \ + static_assert(condition, errmessage) +#else +/* not worth providing a workaround */ +#define StaticAssertStmt(condition, errmessage) \ + ((void) 0) +#endif +#define StaticAssertExpr(condition, errmessage) \ + ({ StaticAssertStmt(condition, errmessage); true; }) +#endif /* C++ */ /* base-commit: b5c75feca7ffb2667c42b86286e262d6cb709b76 -- 2.14.1