_Static_assert("foo", "string is nonzero"); #ifndef __cplusplus
#endif
_Static_assert(1, "1 is nonzero"); _Static_assert(0, "0 is nonzero");
#ifdef MS
static_assert(1, "1 is nonzero"); #endif
void foo(void) {
_Static_assert(1, "1 is nonzero"); _Static_assert(0, "0 is nonzero"); #ifdef MS
static_assert(1, "1 is nonzero"); #endif
}
_Static_assert(1, invalid);
struct A {
int a;
_Static_assert(1, "1 is nonzero"); _Static_assert(0, "0 is nonzero"); #ifdef MS
static_assert(1, "1 is nonzero"); #endif
};
#ifdef __cplusplus
#define ASSERT_IS_TYPE(T) __is_same(T, T)
#else
#define ASSERT_IS_TYPE(T) __builtin_types_compatible_p(T, T)
#endif
#define UNION(T1, T2) union { \
__typeof__(T1) one; \
__typeof__(T2) two; \
_Static_assert(ASSERT_IS_TYPE(T1), "T1 is not a type"); \
_Static_assert(ASSERT_IS_TYPE(T2), "T2 is not a type"); \
_Static_assert(sizeof(T1) == sizeof(T2), "type size mismatch"); \
}
typedef UNION(unsigned, struct A) U1; UNION(char[2], short) u2 = { .one = { 'a', 'b' } }; typedef UNION(char, short) U3; typedef UNION(float, 0.5f) U4;
#ifdef MS
#define assert(expr)
static_assert(1, "1 is nonzero");
#undef static_assert
static_assert(1, "1 is nonzero"); #endif
_Static_assert(1 , "")