On Tuesday, 22 April 2014 at 17:31:22 UTC, Ali Çehreli wrote:
I opened the following bug before reading reduce's documentation carefully:

  https://issues.dlang.org/show_bug.cgi?id=12610

import std.stdio;
import std.algorithm;

void main()
{
    int[] arr = [ 0 ];

    int[1] seed;
    int[] result = reduce!((sum, _) => sum[])(seed, arr);

    writefln("%s", result);
}

The output is garbage like [373728176].

Note that the original seed is a value type, which is later sliced by the lambda.

Now I think that it can be considered a user error. Do you agree whit that? If so, this is something else we should be careful about similar to the internal buffer of byLine.

Ali

I see one user bug, and one language bug, but no library issues.

The user bug is the lambda, that returns a reference to a local ("sum[]"). That said, I do believe the compiler should be able to catch think.

The "int[] reduce...", however, I think is a outright language issue. Implicilty calling opSlice on a static array is one thing, but doing it on an rvalue is an outright aberration. The code should be rejected no questions asked.

Reply via email to