mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-09-30 21:51:19 +02:00
Add support for static assertions in C++
This allows modules written in C++ to use or include header files that use StaticAssertStmt() etc. Reviewed-by: Tom Lane <tgl@sss.pgh.pa.us>
This commit is contained in:
parent
0689dc3a23
commit
a2c8e5cfdb
@ -754,6 +754,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)
|
||||
@ -765,6 +766,19 @@ 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)
|
||||
#define StaticAssertExpr(condition, errmessage) \
|
||||
StaticAssertStmt(condition, errmessage)
|
||||
#else
|
||||
#define StaticAssertStmt(condition, errmessage) \
|
||||
do { struct static_assert_struct { int static_assert_failure : (condition) ? 1 : -1; }; } while(0)
|
||||
#define StaticAssertExpr(condition, errmessage) \
|
||||
({ StaticAssertStmt(condition, errmessage); })
|
||||
#endif
|
||||
#endif /* C++ */
|
||||
|
||||
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user