On 12/26/2012 07:37 AM, Namespace wrote: > If I don't comment out line 19 I get: > /home/c803/c821.d(19): Error: function c821.foo (ref A a) is not > callable using argument types (B) > /home/c803/c821.d(19): Error: cast(A)b is not an lvalue > > Code: http://dpaste.dzfl.pl/89f55c62 > > Should not work all three?
I can answer the question in the subject line without looking at dpaste: Yes, in many cases the result of a cast operation is an rvalue. It is a temporary that is constructed at the spot for that cast operation.
Imagine casting an int to a double. The four bytes of the int is nowhere close to what the bit representation of a double is, so a double is made at the spot.
Ali