If I write:
int some_arr[4];
some_arr = {0, 1, 2, 3};
Then my compiler (in this case, GCC) will complain that I don't have an expression before {. So I need to use a compound literal, fine:
int some_arr[4];
some_arr = (int[]){0, 1, 2, 3};
And now we see that I'm not allowed to assign a value to an array.
What?
I can "circumvent" this with something like memcpy(some_arr, (int[]){0, 1, 2, 3}, sizeof(int[4])), or by assigning to each element of some_arr one-by-one (or through a loop.) I can't imagine that GCC is incapable of parsing the individual assignments from what I've wrote (a lazy compiler that doesn't care about the user could probably even do it in the pre-processor), so it seems to come down to "the standard said no." So why does the standard say this particular thing is off-limits?
I'm not looking for the language in the standard that says it's not allowed as much as I'm looking for the history lesson of how that part of the standard came to be.