auto ref is on the docket
via Digitalmars-d
digitalmars-d at puremagic.com
Wed Jun 24 10:48:56 PDT 2015
On Wednesday, 24 June 2015 at 07:12:53 UTC, Iain Buclaw wrote:
> On 22 Jun 2015 08:40, "Andrei Alexandrescu via Digitalmars-d" <
> digitalmars-d at puremagic.com> wrote:
>>
>> On 6/21/15 11:31 PM, Andrei Alexandrescu wrote:
>>>
>>> On 6/21/15 10:25 PM, Walter Bright wrote:
>>>>
>>>> The idea is that fun(5) would be lowered to:
>>>>
>>>> auto tmp = 5;
>>>> fun(tmp);
>>>
>>>
>>> I don't think that lowering is recommended - it prolongs the
>>> lifetime of the temporary through the end of the caller. But
>>> that may be actually a good thing.
>>
>>
>> On second thought - Walter's lowering, which makes the rvalue
>> last more
> than strictly necessary, may be the most flexible of all at the
> cost of more resource consumption (for types that define
> destructors). -- Andrei
>>
>
> I think keeping the lifetime of objects strictly in the call
> expression is the behaviour that will give least surprise.
Call expression, or statement containing the call expression? For
normal temporaries, it's the latter AFAIK.
>
> int i = 42;
> struct S { ~this() { i++; } }
>
> // auto __autoreftmp = S();
> foo(S()); // __autoreftmp
> // __dtor(__autoreftmp);
> assert(i == 43);
It would make a difference for:
auto x = foo(S()) + foo(S());
>
> As for optimisations, I think it should be possible to assert
> that the reference never escapes, and use more aggressive
> optimisations based on that, something that is still not
> possible with 'scope ref' or 'in ref' parameters ...
Not possible because it's not implemented, or are there
fundamental reasons against it?
More information about the Digitalmars-d
mailing list