www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 13074] New: Old opCmp requirement for AA keys should be

https://issues.dlang.org/show_bug.cgi?id=13074

          Issue ID: 13074
           Summary: Old opCmp requirement for AA keys should be detected
           Product: D
           Version: D2
          Hardware: All
                OS: All
            Status: NEW
          Keywords: diagnostic
          Severity: blocker
          Priority: P1
         Component: DMD
          Assignee: nobody puremagic.com
          Reporter: k.hara.pg gmail.com

For code migration from 2.065 to 2.066, following code should report diagnostic
error.

struct S
{
    int x;
    int y;

    int opCmp(ref const S other) const
    {
        return x < other.x ? -1 : x > other.x ? 1 : 0;
    }
    hash_t toHash() const
    {
        return x;
    }
}

void main()
{
    S s1 = S(1, 1);
    S s2 = S(1, 2);
    S s3 = S(2, 1);
    S s4 = S(2, 2);
    bool[S] arr;     // line 22
    arr[s1] = true;
    arr[s2] = true;
    arr[s3] = true;
    arr[s4] = true;

    import std.stdio;
    writeln(arr);
}

For example:

test.d(22): Error: AA key type S is now required equality rather than
comparison
test.d(22):        Please define opEquals, or remove it to rely on default
memberwise equality


Note that, the error should be removed in the future. Because opCmp should have
no effect when the struct is used for AA keys.

--
Jul 08 2014