[Issue 2327] New: opDot() should work as expected with operator	overloading.
    d-bugmail at puremagic.com 
    d-bugmail at puremagic.com
       
    Tue Sep  2 11:27:18 PDT 2008
    
    
  
http://d.puremagic.com/issues/show_bug.cgi?id=2327
           Summary: opDot() should work as expected with operator
                    overloading.
           Product: D
           Version: 2.018
          Platform: PC
        OS/Version: Windows
            Status: NEW
          Severity: minor
          Priority: P3
         Component: DMD
        AssignedTo: bugzilla at digitalmars.com
        ReportedBy: dsimcha at yahoo.com
struct Foo {
    uint i;
    Foo opAdd(uint input) {
        return Foo(i + input);
    }
}
struct Bar {
    Foo foo;
    Foo opDot() {
        return foo;
    }
}
void main() {
    Bar bar;
    auto result = bar.opAdd(5);  //Works.
    auto result2 = bar + 5;  //Compile time error:  test.d|22|Error:
incompatible types for ((bar) + (5)): 'Bar' and 'int'|
}
IMHO, this behavior is incorrect. Operator overloading is supposed to be
semantically equivalent to calling the method with the overload name, i.e. a +
b is supposed to be the exact semantic equivalent of a.opAdd(b) if a and b are
class or struct objects with overloaded opAdd.  In this case, it clearly isn't.
-- 
    
    
More information about the Digitalmars-d-bugs
mailing list