disable all member function calls for rvalues?
Andrei Alexandrescu
SeeWebsiteForEmail at erdani.org
Thu Dec 17 20:57:09 PST 2009
There is a wart in D I'd like to eliminate. Unfortunately, that would
also eliminate some valid uses.
The problem is as follows. "ref" values in function parameter lists are
always bound to lvalues - never rvalues. This is, except for _one_ case:
"this" in member functions.
struct A {
void fun() {
...
}
}
A gun() { return A(); }
unittest {
gun().fun(); // works
}
This doesn't sound so bad until the following happens:
struct A {
ref A opAssign(ref A rhs) { ... }
}
struct B {
@property A a() { ... }
}
unittest {
B b;
b.a = A.init;
}
Everything looks kosher, but the problem is b.a returns a temporary, and
then that temporary is assigned to. The assignment is inoperant.
For this and other related reasons I'd like to disallow binding
temporaries to "this". There are cases in which you'd want to, and you'd
have to insert explicit variables. But I think eliminating the binding
is the right thing to do.
Thoughts?
Andrei
More information about the Digitalmars-d
mailing list