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.

Reply via email to