uri wrote:
Explain why (a*b) is lvalue in bearophile's second example.
Because the expression evaluates to a temporary, which is an lvalue.
This is one of the weird things in D. The language is too complex. It takes years to find out about the corner cases.
It's not a weird corner case at all. Temporaries can be used as lvalues (in C++ too).