Hi!

I am seeing what it seems to me a very strange behavior with rbtrees:

---
import std.stdio;
import std.container.rbtree;

public struct A {
        public int i;
        
        public this (int _i) {
                this.i = _i;
        }
}

public struct B {
        public auto col = new RedBlackTree!(A,"a.i < b.i");
}

void main() {
        B b1;
        B b2;
        b1.col.insert(A(5));
        
        static assert(&b1 != &b2);
        assert(&(b1.col) != &(b2.col));
        writeln(b1.col.length, " ", b2.col.length);
        writeln(b1.col[], " ", b2.col[]);
}
---

I get the (to me) surprising result of:

---
1 1
[A(5)] [A(5)]
---

Is this the expected result? If so, why? I'd have expected two new empty but different rbtrees to be created, and in fact that's what happen if I declare them as local variables inside main().

In this case, two different rbtrees are indeed created (as seen with the assertion), but they apparently point to the same underlying data...

Thanks!

Reply via email to