Prusa3d Marlin fork
static_assert.h
1 //static_assert.h
2 //portable solution compatible with C++98
3 
4 #if (__cplusplus < 201103L) //std < C++11
5 
6 //source http://www.pixelbeat.org/programming/gcc/STATIC_ASSERT.html
7 #define ASSERT_CONCAT_(a, b) a##b
8 #define ASSERT_CONCAT(a, b) ASSERT_CONCAT_(a, b)
9 
10 // These can't be used after statements in c89.
11 #ifdef __COUNTER__
12  #define static_assert(e,m) \
13  ;enum { ASSERT_CONCAT(STATIC_ASSERT_, __COUNTER__) = 1/(int)(!!(e)) }
14 #else
15  //This can't be used twice on the same line so ensure if using in headers
16  //that the headers are not included twice (by wrapping in #ifndef...#endif)
17  //Note it doesn't cause an issue when used on same line of separate modules
18  //compiled with gcc -combine -fwhole-program.
19  #define static_assert(e,m) \
20  ;enum { ASSERT_CONCAT(assert_line_, __LINE__) = 1/(int)(!!(e)) }
21 #endif //__COUNTER__
22 
23 #endif //(__cplusplus < 201103L)