http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54823
--- Comment #3 from Sebastian Freundt <devel at fresse dot org> 2012-10-05 11:46:20 UTC --- I'm more or less referring to the internals, why is it a constant expression in the first case, but not treated as an integer constant expression. Also, according to the rules of indirection (6.5.3.2): If [a string literal X] has type "pointer to TYPE" then *X should have type X. Now if internally *" " is a integer (or char) internally, and taking the rules of indirection literally, then enum {foo = *" "}; should be (in my eyes) the same as enum {foo = (char)32};