On Friday, 10 January 2014 at 08:27:42 UTC, Andrei Alexandrescu
wrote:
It's an outrage, and this particular combination of
(mis)features has never got to my attention until now.
I've submitted
https://d.puremagic.com/issues/show_bug.cgi?id=11889 on your
behalf. I've also sent out the fix
https://github.com/D-Programming-Language/phobos/pull/1845 for
review. (It's simple, but perhaps I'm missing some subtler
issues.)
Apologies for this!
Andrei
Array returns a value by design. I don't think it's array that's
wrong here, it's being able to assign to members of an rvalue
(IMO).
Off the top of my head, a possible language enhancement would be
to allow member functions to be marked as "ref", in which case,
they only work on lvalue (as applying the function on a temp
would make no sense).
eg:
struct S
{
void doit();
void opAssign(int) ref;
}
void main()
{
S().doit(); //OK, rvalue call
S() = 5; //Nope, opAssign requires an lvalue.
}