Halp! type system (__expand_field_0 error), compile time/runtime questions (AoC-2017 puzzle spoilers inside)
aliak
something at something.com
Thu Dec 14 22:56:05 UTC 2017
On Thursday, 14 December 2017 at 16:38:26 UTC, Steven
Schveighoffer wrote:
> So enumerate returns as its element type a Tuple. Specifically,
> it's going to be a Tuple!(size_t, int), since you are
> enumerating an array of ints.
>
> I'm not sure why you are having the error, compiling your code
> above works perfectly fine for me. It would help to know:
>
> a) which version of the compiler you are using?
Tried with dmd v2.077.1. Also with LDC 1.6 (which uses dmd
v2.076.1)
> b) if the above actually does compile for you, what is the
> minimal code that does not?
Yes of course, here's a minimal program that does not compile for
me:
import std.stdio, std.algorithm, std.range, std.array;
int rotate(int[] lengths) {
foreach(skip, length; lengths.enumerate) {}
return 0;
}
auto knotHash(string input) {
return [1].rotate();
}
auto data = ["string"]
.map!knotHash
.array;
void main() {}
The above code, however, will compile with any of the following
changes, and I don't understand why for any of them:
1) remove .enumerate
2) move the auto data inside the body of main
3) remove the call to .array
> All that aside, you may not realize, this works as well:
>
> foreach(skip, length; lengths)
Sweet, thanks! Yeah that works too.
Another thing I realized is that if I switch from .enumerate to
the foreach you suggest (in my non minimized example) the compile
time increases by A LOT. From about 1 second to 70 seconds.
More information about the Digitalmars-d-learn
mailing list