On 1/14/2018 6:55 AM, Q. Schroll wrote:
How is (1, 2) different from [1, 2] (static array)?
It's a very good question. It's corollary is how is (1, 2) different from
struct S { int a, b; }
It does turn out that int[2] is structurally (!) the same as struct S. This is a
property I've taken some pains to ensure stays valid, and it has turned out to
be nicely useful.
But consider:
S foo(char a, char b);
t = ('a', 'b');
foo(t); // equivalent to foo('a', 'b')
That works. But:
S s = {'a', 'b' };
foo(s); // Does not work
It does not work is because s as a parameter has a distinctly different ABI than
(char, char). The former consumes an int sized parameter, the latter two int
sized parameters. A similar issue exists with the return value.
So far, the issue of unification of tuples with arrays (and structs) has
defeated me because of the fundamental structural differences in the ABI which
we are stuck with.