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.

Reply via email to