Paul Schlie <[EMAIL PROTECTED]> writes:

| > Note that I'm explicitly not taking a position on what the standard says.
| > The standard is notoriously incomplete with respect to object model issues,
| > including volatility, so I think that trying particularly hard to parse its
| > words in this area is probably not a good use of time for people trying to
| > build a real-world compiler. Creating DRs is more useful than trying to read
| > the tea leaves.
| >
| > Clearly, the analogous rule does not make sense for "const" in that a 
"const"
| > object can never be modified; in particular, if the compiler can prove that
| > "*x = 3" is an attempt to modify an object whose dynamic type is "const 
int",
| > then it can replace that with a call to "kill (SIGSEGV)", if it likes; this
| > is unquestionably undefined behavior.
| 
| With all due respect, unless there is an explicit reference in the standard
| to contradict it's clearly stated requirement that an object's qualified
| lvalue ("locator value") designates the object being referenced, all
| interpretations to the contrary are at best presumptuous, regardless of
| whether or not it's generalized behavior may be indeterminate.
| 
| (but regardless, at least things are successively approximating "correct")

I don't understand what you mean here.  Are you seriously suggesting
that 

     int main(void) {
        const int x = 4;
        *(int*)&x = 3;
     }

is well-defined?

-- Gaby

Reply via email to