http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56465
Chung-Ju Wu <jasonwucj at gmail dot com> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |jasonwucj at gmail dot com
--- Comment #3 from Chung-Ju Wu <jasonwucj at gmail dot com> 2013-02-28
17:19:13 UTC ---
(In reply to comment #2)
> (In reply to comment #1)
> > >it is actual a constant.
> >
> > I don't think it is a integer constant expression though as it contains a
> > cast
> > from a pointer type to an integer type.
>
> Well, it isn't a integer scalar, but still a constant.
To my understanding, it is not a constant.
For example,
int i;
i = (int) ((int*)0 + 1);
Could you tell the value of i from C language point of view?
According to C99 6.5.6 Point 8,
"When an expression that has integer type is added to or subtracted
from a pointer, the result has the type of the pointer operand."
Hence, the result of "(int*)0 + 1" is a 'pointer to type T'.
So, no, you can't tell the value.
It depends on integer size of target machine.