Consider the following definition of Foo and an accompanying unittest:

[code]
struct Foo
{
    @property int[int] aa() {return m_aa;}
    @property ref int[int] aaRef() {return m_aa;}
    int[int] m_aa;
}

unittest
{
    Foo foo;
    assert(5 !in foo.m_aa); // Sanity-check to start off
    foo.aa[5] = 1;          // Add an element with key 5
    assert(5 !in foo.m_aa); // ...huh. 5 didn't make it in?
    foo.aaRef[5] = 1;       // Try again, using the ref variant
    assert(5 in foo.m_aa);  // Works!
}
[/code]

I was under the impression that associative arrays are reference types; if I pass a non-ref "copy" of one, shouldn't insertions still be reflected in the original? Am I dealing with a bug or a misunderstanding on my part?

Reply via email to