On 4/6/07, Marshall Clow <email@hidden> wrote:
> At 2:48 PM -0700 4/6/07, Mark Wagner wrote:
> >The following code produces a warning from GCC about "target of
> >assignment not really an lvalue; this will be a hard error in the
> >future". What's going wrong, and how do I fix it?
> >
> > char *typeOfQ = NULL;
> > static_cast<const char *>(typeOfQ) =
> >handle.FirstChildElement("fieldlabel").Element()->NextSiblingElement("fieldentry")->GetText();
>
> GCC is telling you that there is a problem in your code (hence the
> warning), and telling you that future versions of the compiler will
> flag this as an error rather than a warning.
>
> This expression:
> static_cast<const char *>(typeOfQ)
> is not a variable, it is a expression.
>
> Think of the difference between 'x' and '3' - one can be assigned to,
> the other cannot )
> Googling for "rvalue" and "lvalue" will give more general information.
I know the difference between an lvalue and an rvalue. My
understanding is that "static_cast<const char *>(typeOfQ)" is
functionally and semantically equivalent to "(const char *)typeOfQ"
with the addition of compile-time checking to make sure the conversion
is defined.