#define STATIC_ASSERT(expr) typedef struct {\
char dummy[(expr)?1:-1];\
} static_asserttmp##__LINE__;
#define STATIC_ASSERT2(expr) typedef struct static_asserttmp_2_##LINE__ {\
char dummy[(expr)?1:-1];\
} static_asserttmp##__LINE__;

単体で使えるC版を考えるとこうかな
追記:1行で2つ使うと悲惨なことになるかも。
プリプロセッサ内部で使う場合は要注意