diff options
author | Colin Snover | 2017-11-09 12:11:33 -0600 |
---|---|---|
committer | Colin Snover | 2017-11-10 09:56:43 -0600 |
commit | 2de83e09374abd10700e5f2bc4671318f182980b (patch) | |
tree | a2e2f4e9347caf47bfedc1c8f3aa1b5be0543287 | |
parent | 600fe749c5a6c680ac4bb515a28ae94985536d1d (diff) | |
download | scummvm-rg350-2de83e09374abd10700e5f2bc4671318f182980b.tar.gz scummvm-rg350-2de83e09374abd10700e5f2bc4671318f182980b.tar.bz2 scummvm-rg350-2de83e09374abd10700e5f2bc4671318f182980b.zip |
COMMON: Use C++11 static_assert when available
This improves the output of static assertions in all compilers,
and prevents problems in MSVC 2015 where the mechanism for
triggering a compilation error in C++98 mode may cause errors when
that compiler builds in release mode.
Fixes Trac#10154.
-rw-r--r-- | common/scummsys.h | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/common/scummsys.h b/common/scummsys.h index 4740127d2f..5486ba27c6 100644 --- a/common/scummsys.h +++ b/common/scummsys.h @@ -154,6 +154,7 @@ #endif #ifndef STATIC_ASSERT +#if __cplusplus >= 201103L || (defined(_MSC_VER) && _MSC_VER > 1600) /** * Generates a compile-time assertion. * @@ -162,8 +163,21 @@ * time if the expression evaluates to false. */ #define STATIC_ASSERT(expression, message) \ - extern int STATIC_ASSERT_##message[(expression) ? 1 : -1]; \ - (void)(STATIC_ASSERT_##message); + static_assert((expression), #message) +#else + /** + * Generates a compile-time assertion. + * + * @param expression An expression that can be evaluated at compile time. + * @param message An underscore-delimited message to be presented at compile + * time if the expression evaluates to false. + */ + #define STATIC_ASSERT(expression, message) \ + do { \ + extern int STATIC_ASSERT_##message[(expression) ? 1 : -1]; \ + (void)(STATIC_ASSERT_##message); \ + } while (false) +#endif #endif // The following math constants are usually defined by the system math.h header, but |