ref + operator overloading question
Aleksey
matklad at mail.ru
Mon Sep 16 14:01:47 PDT 2013
On Monday, 16 September 2013 at 20:53:18 UTC, Namespace wrote:
> On Monday, 16 September 2013 at 20:43:01 UTC, Aleksey wrote:
>> I get strange type errors in the following code, and I don't
>> understand why =( Could anybody help?
>>
>> struct I {
>> int i;
>> I opBinary(string op)(ref I that)
>> if (op == "+") {
>> return I(i + that.i);
>> }
>> }
>>
>> void main() {
>> auto a = I(1);
>> auto d = a + (a + a);
>> }
>>
>> Error: incompatible types for ((a) + (a.opBinary(a))): 'I' and
>> 'I'
>>
>> If I remove ref or parens around (a+a) the code compiles just
>> fine.
>
> opBinary returns a rvalue. But your code accepts only lvalues.
> (a + a) produce an rvalue so a + (a + a) is the same as lvalue
> + rvalue and rvalues aren't accepted. You could use auto ref
> for that purpose.
Thank you! auto ref is exactly what I was looking for!
More information about the Digitalmars-d-learn
mailing list