Why does sum not work in static arrays?

drug via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sun Dec 6 04:27:39 PST 2015


06.12.2015 15:23, Tim K. пишет:
> Hi! I have the following code:
>
>      int main(string[] argv)
>      {
>          import std.algorithm: sum;
>          import std.stdio: writeln;
>
>          uint[3] a1 = [1, 2, 3];
>          uint[] a2;
>          for (int i = 1; i <= 3; ++i)
>              a2 ~= i;
>
>          writeln("a1: ", sum(a1));
>          writeln("a2: ", sum(a2));
>          return 0;
>      }
>
> This throws the error:
> dummy.d(11): Error: template std.algorithm.iteration.sum cannot deduce
> function from argument types !()(uint[3]), candidates are:
> /usr/include/dmd/phobos/std/algorithm/iteration.d(3916):
> std.algorithm.iteration.sum(R)(R r) if (isInputRange!R && !isInfinite!R
> && is(typeof(r.front + r.front)))
> /usr/include/dmd/phobos/std/algorithm/iteration.d(3927):
> std.algorithm.iteration.sum(R, E)(R r, E seed) if (isInputRange!R &&
> !isInfinite!R && is(typeof(seed = seed + r.front)))
>
>
> So a dynamic array works just fine. In fact, if I uncomment the line in
> question the program compiles and outputs the correct value (for a2).
> Why does "sum" not work on static arrays?
>
>
> Regards
Because static array aren't ranges, but dynamic ones are. Try this:
writeln("a1" ", sum (a1[])); // using [] makes static array to be a range


More information about the Digitalmars-d-learn mailing list