Hello,

Why is tuple variable `params` immediately destructed after its construction?
Why is `check(-2)` after `dtor(2)`?

Code:
```d
import std.stdio : writeln;
import core.lifetime : forward, move;

struct Foo{
        int i;

    this(int i){
        this.i = i;
        writeln("ctor(", i, "): ", cast(void*)&this);
    }

    ~this(){
        writeln("dtor(", i, "): ", cast(void*)&this);
        i *= -1;
    }
}

void seq(Args...)(auto ref Args args){
    Args params = forward!args;
    writeln("params initialized");

    alias foo = params[0];
    writeln("check(", foo.i, "): ", cast(void*)&foo);

}

void main(){
    writeln("Foo(1):");
    {
        auto foo = Foo(1);
        writeln("check(", foo.i, "): ", cast(void*)&foo);
    }

    writeln("\nFoo(2):");
    seq(Foo(2));
}


```

Output:
```
Foo(1):
ctor(1): 7FFEBCAF0538
check(1): 7FFEBCAF0538
dtor(1): 7FFEBCAF0538

Foo(2):
ctor(2): 7FFEBCAF0548
dtor(2): 7FFEBCAF04F0
params initialized
check(-2): 7FFEBCAF04F0
dtor(0): 7FFEBCAF0558
```


Reply via email to