the best part is if you dont infer the types .{} → T{}, the result changes
I can’t find any description of the order of evaluation, but I can deduce from the examples in the link above and your own, that it is the order from the source.
Wow, even while it’s documented that’s quite unexpected. Definitely worth the gotcha list for the primer for developers coming from other languages. Especially developers used to swizzles as they’re used to rely on mechanics like this.
I think most developers from other languages would be fooled by this line from the docs:
arr = .{ arr[1], arr[0] };
This statement does NOT swap instead it sets both values to arr [1].
Strict left-to-right. That does mean that the address (result location) is determined before anything is written to it, and if they overlap, unexpected things can indeed happen.