On Saturday, 15 March 2014 at 00:11:22 UTC, bearophile wrote:
Do you think it's useful/worth supporting code like that?

My expectation would be that your code is implicitly the same as:

int[5] foo(int[2] a, int[3] b) {
   int[5] staticArray;
   int[] dynamicArray = a ~ b;
   staticArray = dynamicArray;
   return staticArray;
}

Based on the information at http://dlang.org/arrays.html, my expectation would be that a copy requires the slice operator, which isn't in your code. Thus it's trying to initialize staticArray as a new dynamic array -- which obviously wouldn't work.

Since your code doesn't have access to the hidden staticArray variable, there's no way to write the correct code:

staticArray[] = dynamicArray;

Short of changing the standard to consider "a = b" to be equivalent to "a[] = b" when both a and b are arrays, I don't think your code should be handled. And I think such a change would be dangerous.

The following works, and I think is probably acceptable.

int[5] foo(int[2] a, int[3] b) {
    int[5] ret;
    ret[] = a ~ b;
    return ret;
}

Reply via email to