【D言語】動的配列を引数とする関数のメモ化

今回は、タイトルにある通り、動的配列を引数とする関数のメモ化に関する問題を掘り下げます。

何が問題なのか?

以下のコードがあります。


import std.stdio, std.functional;

int _func(int[] arg){
    writeln("called");
    return 0;
}

alias memoize!_func func;

void main(){
    int[] a = [1, 1, 2, 3], b = [1, 1, 2, 3];
    writeln("-----");
    func(a);
    writeln("-----");
    func(b);
    writeln("-----");
    a[0] = 0;
    func(a);
    writeln("-----");
}

このコードを実際に実行するとどうなるでしょうか?