文字列一致アルゴリズムの結果を格納するためのベースとして構築しているこの単純なクラスを見てください。
/** Match of a single pattern in full to a single text. */
class Match {
    uint Tpos;
    this(in uint Tpos) { this.Tpos = Tpos; }
    override string toString() {
        return text("Match: Text@",Tpos);
    }
}
ここで奇妙なことが起こります:
auto m1 = new Match(1), m2 = new Match(1);
writeln(m1.toHash());
writeln(m2.toHash());
writeln(m1 == m2);
版画
4464528
4464512
false
これら 2 つのオブジェクトがデフォルトで等しいと見なされるべきではない理由はわかりません。カスタムtoHash()とopEquals()関数を記述できると思いますが、それはやり過ぎのようです。Andrei Alexandrescu の D プログラミング言語に関する本 (すばらしい本です!) によると、「デフォルトでは、ハッシュはオブジェクトのビット単位の表現を使用して計算されます。」そこに何かアイデアはありますか?