S(_CXX, dynamic_cast)
S(_CXX, explicit)
S(_CXX, export)
+#undef false
S(_CXX, false)
+#define false 0
S(_CXX, friend)
S(_CXX, mutable)
S(_CXX, namespace)
S(_CXX, template)
S(_CXX, this)
S(_CXX, throw)
+#undef true
S(_CXX, true)
+#define true 1
S(_CXX, try)
S(_CXX, typeid)
S(_CXX, typename)
#undef __ptr64
#endif
+/* needed on MinGW */
+#ifdef __MINGW32__
+#ifdef __int8
+#undef __int8
+#endif
+#ifdef __int16
+#undef __int16
+#endif
+#ifdef __int32
+#undef __int32
+#endif
+#ifdef __int64
+#undef __int64
+#endif
+#endif
+
+#if defined(__MINGW32__) || defined(__CYGWIN__)
+#ifdef __cdecl
+#undef __cdecl
+#endif
+#ifdef __stdcall
+#undef __stdcall
+#endif
+#ifdef __fastcall
+#undef __fastcall
+#endif
+#endif
+
/* needed on darwin... */
#ifdef __signed
#undef __signed
#endif
#define S(mode, x, val) T(mode, x, #x, val)
-S(_ANSI|_C99, signed, )
-S(_ALL, __signed, = T_signed)
-S(_ALL, __signed__, = T_signed)
-S(_C99|_GNUC, _Complex, )
-S(_ALL, __complex__, = T__Complex)
-S(_ALL, __complex, = T__Complex)
-S(_C99|_GNUC, _Imaginary, )
-S(_ALL, __real__, )
-S(_ALL, __real, = T___real__)
-S(_ALL, __imag__, )
-S(_ALL, __imag, = T___imag__)
-S(_ALL, __alignof__, )
-S(_ALL, __alignof, = T___alignof__)
-S(_MS, _alignof, = T___alignof__)
-S(_ANSI|_C99, const, )
-S(_ALL, __const, = T_const)
-S(_ALL, __const__, = T_const)
-S(_C99, restrict, )
-S(_ALL, __restrict__, = T_restrict)
-S(_ALL, __restrict, = T_restrict)
-S(_MS, _restrict, = T_restrict)
-S(_ALL, asm, )
-S(_ALL, __asm__, = T_asm)
-S(_MS, _asm, = T_asm)
-S(_ALL, __asm, = T_asm)
-S(_ANSI|_C99, volatile, )
-S(_ALL, __volatile, = T_volatile)
-S(_ALL, __volatile__, = T_volatile)
-S(_C99|_CXX, inline, )
-S(_ALL, __inline, = T_inline)
-S(_ALL, __inline__, = T_inline)
-S(_GNUC, typeof, )
-S(_ALL, __typeof, = T_typeof)
-S(_ALL, __typeof__, = T_typeof)
-S(_ALL, __attribute__, )
+S(_ANSI|_C99|_CXX, signed, )
+S(_ALL, __signed, = T_signed)
+S(_ALL, __signed__, = T_signed)
+S(_C99|_GNUC, _Complex, )
+S(_ALL, __complex__, = T__Complex)
+S(_ALL, __complex, = T__Complex)
+S(_C99|_GNUC, _Imaginary, )
+S(_ALL, __real__, )
+S(_ALL, __real, = T___real__)
+S(_ALL, __imag__, )
+S(_ALL, __imag, = T___imag__)
+S(_ALL, __alignof__, )
+S(_ALL, __alignof, = T___alignof__)
+S(_MS, _alignof, = T___alignof__)
+S(_ANSI|_C99|_CXX, const, )
+S(_ALL, __const, = T_const)
+S(_ALL, __const__, = T_const)
+S(_C99, restrict, )
+S(_ALL, __restrict__, = T_restrict)
+S(_ALL, __restrict, = T_restrict)
+S(_MS, _restrict, = T_restrict)
+S(_ALL, asm, )
+S(_ALL, __asm__, = T_asm)
+S(_MS, _asm, = T_asm)
+S(_ALL, __asm, = T_asm)
+S(_ANSI|_C99|_CXX, volatile, )
+S(_ALL, __volatile, = T_volatile)
+S(_ALL, __volatile__, = T_volatile)
+S(_C99|_CXX, inline, )
+S(_ALL, __inline, = T_inline)
+S(_ALL, __inline__, = T_inline)
+S(_GNUC, typeof, )
+S(_ALL, __typeof, = T_typeof)
+S(_ALL, __typeof__, = T_typeof)
+S(_ALL, __attribute__, )
-S(_ALL, __builtin_va_start, )
-S(_ALL, __builtin_stdarg_start, = T___builtin_va_start)
+S(_ALL, __builtin_va_start, )
+S(_ALL, __builtin_stdarg_start, = T___builtin_va_start)
-S(_MS, _near, )
-S(_MS, __near, = T__near)
-S(_MS, _far, )
-S(_MS, __far, = T__far)
-S(_MS, cdecl, )
-S(_MS, _cdecl, = T_cdecl)
-S(_MS, __cdecl, = T_cdecl)
-S(_MS, _stdcall, )
-S(_MS, __stdcall, = T__stdcall)
-S(_MS, _fastcall, )
-S(_MS, __fastcall, = T__fastcall)
-S(_MS, __thiscall, )
-S(_MS, _forceinline, )
-S(_MS, __forceinline, = T__forceinline)
-S(_MS, __unaligned, )
-S(_MS, _assume, )
-S(_MS, __assume, = T__assume)
-S(_MS, _try, )
-S(_MS, __try, = T__try)
-S(_MS, _finally, )
-S(_MS, __finally, = T__finally)
-S(_MS, _leave, )
-S(_MS, __leave, = T__leave)
-S(_MS, _except, )
-S(_MS, __except, = T__except)
-S(_MS, _declspec, )
-S(_MS, __declspec, = T__declspec)
-S(_MS, _based, )
-S(_MS, __based, = T__based)
-S(_MS, __noop, )
+S(_MS, _near, )
+S(_MS, __near, = T__near)
+S(_MS, _far, )
+S(_MS, __far, = T__far)
+S(_MS, cdecl, )
+S(_MS, _cdecl, = T_cdecl)
+S(_MS, __cdecl, = T_cdecl)
+S(_MS, _stdcall, )
+S(_MS, __stdcall, = T__stdcall)
+S(_MS, _fastcall, )
+S(_MS, __fastcall, = T__fastcall)
+S(_MS, __thiscall, )
+S(_MS, _forceinline, )
+S(_MS, __forceinline, = T__forceinline)
+S(_MS, __unaligned, )
+S(_MS, _assume, )
+S(_MS, __assume, = T__assume)
+S(_MS, _try, )
+S(_MS, __try, = T__try)
+S(_MS, _finally, )
+S(_MS, __finally, = T__finally)
+S(_MS, _leave, )
+S(_MS, __leave, = T__leave)
+S(_MS, _except, )
+S(_MS, __except, = T__except)
+S(_MS, _declspec, )
+S(_MS, __declspec, = T__declspec)
+S(_MS, _based, )
+S(_MS, __based, = T__based)
+S(_MS, __noop, )
-S(_MS, __ptr32, )
-S(_MS, __ptr64, )
-S(_MS, __sptr, )
-S(_MS, __uptr, )
-S(_MS, _w64, )
-S(_MS, __w64, = T__w64)
+S(_MS, __ptr32, )
+S(_MS, __ptr64, )
+S(_MS, __sptr, )
+S(_MS, __uptr, )
+S(_MS, _w64, )
+S(_MS, __w64, = T__w64)
-S(_MS, _int8, )
-S(_MS, __int8, = T__int8)
-S(_MS, _int16, )
-S(_MS, __int16, = T__int16)
-S(_MS, _int32, )
-S(_MS, __int32, = T__int32)
-S(_MS, _int64, )
-S(_MS, __int64, = T__int64)
-S(_MS, _int128, )
-S(_MS, __int128, = T__int128)
+S(_MS, _int8, )
+S(_MS, __int8, = T__int8)
+S(_MS, _int16, )
+S(_MS, __int16, = T__int16)
+S(_MS, _int32, )
+S(_MS, __int32, = T__int32)
+S(_MS, _int64, )
+S(_MS, __int64, = T__int64)
+S(_MS, _int128, )
+S(_MS, __int128, = T__int128)
#undef S
+
+/* Redefine required macros for MinGW headers */
+#if defined(__MINGW32__) || defined(__CYGWIN__)
+#define __stdcall __attribute__((__stdcall__))
+#define __fastcall __attribute__((__fastcall__))
+#define __cdecl __attribute__((__cdecl__))
+#endif