Why does `static foreach` lead to something calling `~=` internally?
Exil
Exil at gmall.com
Tue Jul 9 13:32:34 UTC 2019
On Sunday, 7 July 2019 at 18:45:14 UTC, 0xEAB wrote:
> On Sunday, 7 July 2019 at 16:51:57 UTC, 0xEAB wrote:
>> Why does this `static foreach` lead to hidden usage of operator
>
>
> Further notes by Dan (aka "Wild"):
>> I added some small printfs to the compiler, http://ix.io/1NWM
>> It seems like it lowers it into something weird
Static foreach needs a tuple. When you have a range like "0 ..
10" it has to convert that to a tuple. It does this by generating
some code and running it at CTFE. Guess this was done as it was a
lot simpler to do, you don't have to worry about recreating
ranges as that's already done by using CTFE.
What it ends up lowering to:
https://github.com/dlang/dmd/blob/v2.087.0/src/dmd/cond.d#L274
* static foreach (x; {
* typeof({
* foreach (x; range) return x;
* }())[] __res;
* foreach (x; range) __res ~= x;
* return __res;
* }()) { ... }
More information about the Digitalmars-d-learn
mailing list