rvalues -> ref (yup... again!)

jmh530 john.michael.hall at gmail.com
Mon Mar 26 20:39:34 UTC 2018


On Friday, 23 March 2018 at 22:01:44 UTC, Manu wrote:
>
> Can you please explain these 'weirdities'?
> What are said "major unintended consequences"?
> Explain how the situation if implemented would be any different 
> than
> the workaround?
>
> This seems even simpler than the pow thing to me.
> Rewrite:
>     func(f());
> as:
>     { auto __t0 = f(); func(__t0); }
>
>
> How is that worse than the code you have to write:
>     T temp = f();
>     T zero = 0;
>     func(temp, zero);
>

I feel like this example wasn't really concrete enough for me. I 
wrote a version below that I think made it a little clearer for 
myself.

-----

import std.stdio : writeln;

struct Foo
{
     int data;
}

int foo(Foo x)
{
     writeln("here");
     return x.data;
}

int foo(ref Foo x)
{
     writeln("there");
     return x.data;
}


void main()
{
     auto x = Foo(5);
     auto y = foo(x);
     writeln(y);

     auto z = foo(Foo(5));
     writeln(z);
}


More information about the Digitalmars-d mailing list