disable all member function calls for rvalues?
Steven Schveighoffer
schveiguy at yahoo.com
Tue Dec 22 05:45:00 PST 2009
On Tue, 22 Dec 2009 08:41:11 -0500, Steven Schveighoffer
<schveiguy at yahoo.com> wrote:
> On Tue, 22 Dec 2009 08:30:33 -0500, Andrei Alexandrescu
> <SeeWebsiteForEmail at erdani.org> wrote:
>
>> Kagamin wrote:
>>> Andrei Alexandrescu Wrote:
>>>
>>>>> I think, possible solution is to disallow assign operations on the
>>>>> return value: =, +=, *=, ~=, ++ etc, but read operations should be
>>>>> allowed and functions should be callable by their symbolical names.
>>>> Won't help. Consider:
>>>>
>>>> a.b.c.d.e.f = g;
>>>>
>>>> If anywhere on the path an rvalue is created, the code is useless
>>>> busywork.
>>> In contrast with the original example this is not a bug.
>>
>> I think it is to the extent (a) it does nothing (b) the syntactic
>> equivalent code involving fields does something. It's an egregious
>> breakage of consistency because properties were meant to be
>> generalizations of fields in the first place.
>
> What if a.b returns a Rebindable!(const(T)) rvalue, and the rest are
> lvalues?
I just realized in my efforts to use a real phobos-supported wrapper type,
I doomed my own argument :)
The point is, wrapper types shouldn't have second-class citizenship as
rvalues to pointers and references. There's got to be a way to identify
types as being lvalues even though the compiler doesn't see it that way.
If you can accomplish that, then I have no problem disallowing setting
members of true rvalues.
-Steve
More information about the Digitalmars-d
mailing list