On Monday, 17 January 2022 at 00:54:19 UTC, forkit wrote:
..


module test;

import std;

@safe void main()
{
    // mArr1 is a dynamic array allocated on the gc heap.
    int[][] mArr1 = [[1, 2], [3, 4], [5, 6], [7, 8]];
    static assert(is(typeof(mArr1.array())));
    alias R1 = typeof(mArr1);
    static assert(isRandomAccessRange!R1 &&
                  isForwardRange!R1 &&
                  isInputRange!R1 &&
                  isBidirectionalRange!R1 &&
                  hasAssignableElements!R1 &&
                  !isInfinite!R1 &&
                  hasSlicing!R1);

    // mArr2 is a dynamic array allocated on the gc heap
// although compiling with '-profile=gc' incorrectly suggests otherwise.
    int[][] mArr2 = iota(1, 9).chunks(2).map!array.array;
    static assert(is(typeof(mArr2.array())));
    alias R2 = typeof(mArr2);
    static assert(isRandomAccessRange!R2 &&
                  isForwardRange!R2 &&
                  isInputRange!R2 &&
                  isBidirectionalRange!R2 &&
                  hasAssignableElements!R2 &&
                  !isInfinite!R2 &&
                  hasSlicing!R2);

    static assert(is(typeof(mArr1) == typeof(mArr2)));

}

/+

if add @nogc to above code:
(8): Error: array literal in `@nogc` function `D main` may cause a GC allocation (22): Error: `@nogc` function `D main` cannot call non-@nogc function `std.array.array!(MapResult!(array, Chunks!(Result))).array`

+/

Reply via email to