static_assert - portable solution compatible with C++98

This commit is contained in:
Robert Pelnar 2018-09-27 19:59:29 +02:00
parent c2f535b619
commit e50025cc7d
3 changed files with 27 additions and 0 deletions

View File

@ -10,6 +10,7 @@
#include "Marlin.h"
#include "ultralcd.h"
#include "language.h"
#include "static_assert.h"

23
Firmware/static_assert.h Normal file
View File

@ -0,0 +1,23 @@
//static_assert.h
//portable solution compatible with C++98
#if (__cplusplus < 201103L) //std < C++11
//source http://www.pixelbeat.org/programming/gcc/STATIC_ASSERT.html
#define ASSERT_CONCAT_(a, b) a##b
#define ASSERT_CONCAT(a, b) ASSERT_CONCAT_(a, b)
// These can't be used after statements in c89.
#ifdef __COUNTER__
#define static_assert(e,m) \
;enum { ASSERT_CONCAT(STATIC_ASSERT_, __COUNTER__) = 1/(int)(!!(e)) }
#else
//This can't be used twice on the same line so ensure if using in headers
//that the headers are not included twice (by wrapping in #ifndef...#endif)
//Note it doesn't cause an issue when used on same line of separate modules
//compiled with gcc -combine -fwhole-program.
#define static_assert(e,m) \
;enum { ASSERT_CONCAT(assert_line_, __LINE__) = 1/(int)(!!(e)) }
#endif //__COUNTER__
#endif //(__cplusplus < 201103L)

View File

@ -37,6 +37,9 @@
#include "mmu.h"
#include "static_assert.h"
extern bool fans_check_enabled;