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

Reply via email to