dnspies:

This doesn't work. It prints two different hashes for equal objects. I meant how do I get the default hash which is used by an associative array.

import std.stdio;

struct my_struct {
        int[] arr;
}

void main() {
        my_struct s1;
        s1.arr = [1,2,3];
        my_struct s2;
        s2.arr = [1,2,3];
        writeln(s1 == s2);
        writeln(typeid(my_struct).getHash(&s1));
        writeln(typeid(my_struct).getHash(&s2));
}

true
626617119
2124658624

Take a look at the output of this program:

import std.stdio;

struct MyStruct {
     int[] arr;
}

void main() {
     MyStruct s1;
     s1.arr = [1,2,3];
     MyStruct s2;
     s2.arr = [1,2,3];
     writeln(s1 == s2);
     writeln(typeid(MyStruct).getHash(&s1));
     writeln(typeid(MyStruct).getHash(&s2));

     int[MyStruct] aa;
     aa[s1] = 10;
     aa[s2] = 20;
     writeln(aa);
}


I have filed this big problem four years ago or more.

Workarounds: define (carefully!) the three hash protocol methods, or use a tuple.

Bye,
bearophile

Reply via email to