I noticed that I don't always have to use the bang notation for
function templates. I played around with that a little, but got
an error when I used a static array. I think it's because of a
casting problem or wrong type inference... I don't imagine it's
a bug. Just not possible.

module test;

import std.range;

void putNumbers(Range, T)(Range r, T start, T incr) {
    T i = start;
    while (!r.empty) {
        r.put(i);  // line 8
        i += incr;
    }
}

void main() {

    int[] arr = new int[20];
    putNumbers!(int[])(arr, 0, 3); // dyn array, bang notation

    int[] arr2 = new int[20];
    putNumbers(arr2, 0, 3); // dyn array, regular notation

    int[20] arr3;
    putNumbers!(int[])(arr3, 0, 3); // stat array, bang notation

    int[20] arr4;
    putNumbers(arr4, 0, 3); // ERROR, stat array, regular notation

}

test.d(8): Error: cast(int[])r is not an lvalue
test.d(25): Error: template instance test.putNumbers!(int[20u],int) error instantiating

Reply via email to