Joe said:
Thanks pete. It seems you are on the side of reason (my side).
There is some wording in the standard about
constants having object type. They do.
They do.
I fear this is being construed to mean that constants are objects.
They are not!
They are not.
Here's that in a nutshell:
N869 6.3.2 Other operands
6.3.2.1 Lvalues and function designators
[#1] An lvalue is an expression with an object type or an
incomplete type other than void; if an lvalue does not
designate an object when it is evaluated, the behavior is
undefined.
(5) is is an expression with an object type
or an incomplete type other than void.
x = (5);
If (5) does not designate an object when it is evaluated,
the behavior is undefined.
From previous discussion on comp.std.c,
I've been informed that what they meant by
"if an lvalue does not designate an object when it is evaluated"
was, an invalidly dereferenced pointer.
char object;
char* pointer;
pointer = &object;
*(pointer + 17) = 0;
The left operand of the last above assignment,
is an example of what they meant by
"an lvalue does not designate an object when it is evaluated".