https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79358
--- Comment #7 from Dominik Vogt <vogt at linux dot vnet.ibm.com> --- Or even -- #include <limits.h> #include <stdint.h> #define FOO(TYPE, EXPR) __typeof__(EXPR) a; __typeof__((TYPE)0 + 0) *b = &a; void foo (void) { FOO(__SIZE_TYPE__, (SIZE_MAX)); } -- So __typeof__(SIZE_MAX) is different from __typeof__(__SIZE_TYPE__) when using -m31.