www.digitalmars.com         C & C++   DMDScript  

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


          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

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;

For example:

test.d(22): Error: AA key type S is now required equality rather than
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