On Sunday, 14 January 2018 at 13:24:14 UTC, Heromyth wrote:
On Sunday, 14 January 2018 at 08:05:34 UTC, Temtaime wrote:
On Sunday, 14 January 2018 at 04:02:09 UTC, Heromyth wrote:
On Saturday, 13 January 2018 at 14:11:23 UTC, H. S. Teoh wrote:
On Sat, Jan 13, 2018 at 12:22:17PM +0000, Heromyth via Digitalmars-d wrote: [...]


https://run.dlang.io/is/RUHtqK
It's not ok dude
It runs because you don't use any variable inside the struct and because struct members are simple functions with hidden parameter

Thanks. It's really dangerous to use a pointer to struct!

I have created another test based on your code. See here https://run.dlang.io/is/LOeMKG

I add *ref* in the constructor and add a new template fucntion writerFor. So, it goes back the scenario in my first post.

Tester tester = new Tester(buildWriter()); // can't compile. The compiler does the right thing.

Tester tester = writerFor(buildWriter()); // Here is a bug, because the compiler takes this!

Am I right?

There's no bug in compiler.
"auto ref" can be NOT a reference. It depends on its parameter. RValues are passed by value.

given

writerFor(buildWriter());

it becomes

auto writerFor(OutRange)(OutRange outRange) // NO REF, parameter is on the stack
{
    auto res = new Tester(outRange);
    return res;
}

and after writerFor the returned object points on a variable inside writerFor which already died

Reply via email to