On Wednesday, 23 December 2020 at 11:19:38 UTC, Rekel wrote:

I'm not sure what your aliasSeq does, sadly I don't find the documentation's explanation satisfactory.

Try to write

static foreach (arr; [a, b]) { .. }

- it will not work because that loop is generated at compile time (static). It will generate the inside code for every usage later in code and for each element (a and b) so the 2 lines inside will be compiled to 4 lines really when you call info().

But the compiler cannot access the values of a and b at compile time (which it thinks it should by using "static" in this case) so we need to say the compiler:

- do not use value or address of [a, b] directly
- instead, use [a, b] as symbol - just prepare the code for later usage

This is what AliasSeq! does in this example. You can put all static stuff inside an AliasSequence:

41      = literal/value
int     = type
int[]   = type
int[] a = symbol/alias


Here it contains not values but the symbols to it. That implementation can become very handy for some situations but for this simple case

foreach (arr; [a, b]) { .. }

would also work. The difference is that the foreach loop is happen at runtime and will not compiled as multiple lines.


Reply via email to