OT: Tuple Syntax and Placeholders (Re: First Draft: Tuple Unpacking Syntax)
Nick Treleaven
nick at geany.org
Sat Aug 2 09:53:11 UTC 2025
On Friday, 1 August 2025 at 10:36:37 UTC, Nick Treleaven wrote:
> On Friday, 1 August 2025 at 10:08:09 UTC, Nick Treleaven wrote:
> Sorry, wrong code above.
> ```d
> T a, b;
> alias seq = AliasSeq!(a, b);
> // auto (x, y) = seq;
> auto x = seq[0];
> auto y = seq[1];
> ```
>
>> `a[0]` and `a[1]` are not moved by the lowered code.
So obviously `a` and `b` are lvalues and shouldn't be moved,
sorry. Other cases:
```d
import std;
struct S
{
int i;
this(ref S s) { writeln("copy", s.i); }
}
void main()
{
writeln("rvalue");
auto a = tuple(S(1))[0]; // copy, not move!
writeln("lvalue");
auto t = tuple(S(2));
writeln("index");
auto b = t[0]; // copy, OK
writeln("seq");
auto c = AliasSeq!(S(3))[0]; // move, OK
}
```
So the DIP should move when unpacking into `c`. For `a`, I think
we would need tuple literals to avoid a copy.
More information about the dip.development
mailing list