http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53745
--- Comment #2 from Jonathan Wakely <redi at gcc dot gnu.org> 2012-06-21 13:36:24 UTC --- The initializer must be converted constant expression of type unsigned long, so by my reading it's ill-formed because (1<<31) has type int and is negative so requires a narrowing conversion to unsigned long.