generalized lvalues -- patch outline
Matt Austern
austern@apple.com
Mon Nov 22 21:39:00 GMT 2004
On Nov 22, 2004, at 12:45 PM, Andrew Pinski wrote:
>
> On Nov 22, 2004, at 3:39 PM, Ziemowit Laski wrote:
>
>> On 19 Nov 2004, at 17.50, Ziemowit Laski wrote:
>>
>>> To put it another way, I'm only concerned with cases where the
>>> compiler currently complains
>>> about assigning to a non-lvalue, and the non-lvalue in question is a
>>> cast of an lvalue.
>>
>> Indeed, I now appear to have a mainline mod for C and C++ which
>> allows assignment to lvalue casts for pointer types. What follows is
>> a high-level synopsis of what I did; if there is interest, I can whip
>> up a full-fledged patch, complete with docs. Please let me know.
>
>
> Just use a builtin as proposed by Nathan and others for the problem you
> are trying to solve. The syntax for casts as lvalue just looks bad.
> The builtin can return a reference (yes even in the C front-end you
> can have references [varargs is an example of which is used as
> references in the front-end]).
Unfortunately, there is another reason for allowing some tamed version
of assignment to casts: compatibility with other compilers. Microsoft
and CodeWarrior both allow this in one form or another. (Microsoft for
C only, CodeWarrior for C++ as well. CodeWarrior only allows some
limited forms of assignments to casts, and doesn't treat a cast as a
true lvalue, so they still get overload resolution right.)
If it's possible to make some limited subset of this work without
hurting C++ correctness, then I think we ought to do it. We don't want
to gratuitously break compatibility with other compilers.
--Matt
More information about the Gcc
mailing list