Walter Bright wrote:
grauzone wrote:
Again, I can't understand. Does the compiler rely that tuples have the
same byte layout as structs or function arguments? I thought the
compiler could just copy all fields. And the backend can already
return multiple values, since it can return structs and static arrays.
A tuple and a struct composed of the same tuple should be interchangeable.
This doesn't work, because the alignment is different for different
circumstances.
Sorry for being dense, but again: what does alignment have to do with
this? This works flawlessly, although there are different alignments
involved:
import std.stdio;
struct A {
align(1):
short a;
int b;
}
struct B {
short a;
int b;
}
void main() {
A x = A(1, 2);
B y;
y.tupleof = x.tupleof;
writefln("%s", y); //printf B(1, 2)
writefln("%s %s", A.b.offsetof, B.b.offsetof); //prints 2 4
}
You can assign the tuple from type A to B, even though the fields have
different alignments. Obviously, the actual tuple type has to be the same.