The liabilities of binding rvalues to ref
Peter Alexander
peter.alexander.au at gmail.com
Sun May 5 04:30:56 PDT 2013
Is there any intention to address the issue of the lvalue-ness of
"this"? In C++, *this is always an lvalue, even if the member
function was called with an rvalue, leading to situations like
this:
struct Number
{
void fix() { if (isnan(x)) x = 0; }
double x;
}
class Collection(T) {
ref T opIndex(size_t i) { ... }
...
}
void fixAll(Collection!Number c) {
foreach (i; 0 .. c.length) {
c[i].fix();
}
}
Here, if Collection changes to return by non-ref then the fix()
call is still valid, silently doing nothing of value. Analogous
code in C++ is allowed as well.
Do we intend to fix this as well? I suspect there are use cases
where such calls are useful, but I can't think of any right now.
More information about the Digitalmars-d
mailing list