My turn to ask a question: I would like to understand how what I wrote in my first email "makes no sense" :-) This code: >>>> static const unsigned x = (unsigned)-1; >>>> >>>> enum e { >>>> ey = (int)x >>>> }; relies on the constant global variable x being a true compile-time constant, right? But as far as I can see, it is impossible to guarantee that it actually is, since in theory you could do const_cast<int*>(&x) = 0; In practice, this code compiles and only crashes at runtime as an access violation (writing to a read-only segment). But it certainly doesn't error at compile time; and even the fact that it crashes at runtime is obviously platform-dependent (it wouldn't crash on MS-DOS :-) ). I guess that the only way is to say that the compiler remembers the initializer value -1 for x and uses it instead of x itself. In other words x itself is never used. I guess that this is where the "static" matters here since inside of one translation unit the initializer value -1 can be remembered? Thanks Benoit