Why does sum not work in static arrays?
cym13 via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Sun Dec 6 04:27:49 PST 2015
On Sunday, 6 December 2015 at 12:23:05 UTC, Tim K. wrote:
> 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
So that you do not shoot yourself in the foot too easily. A
static array is a value type so it is passed by value to
functions. If you pass a 1M array to a function... well, I guesse
you don't want to do that.
The solution is to slice it: a1[].sum; That way you avoid the
problem.
More information about the Digitalmars-d-learn
mailing list