www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 2327] New: opDot() should work as expected with operator overloading.

reply d-bugmail puremagic.com writes:
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 digitalmars.com
        ReportedBy: dsimcha 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.


-- 
Sep 02 2008
parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=2327



--- Comment #1 from David Simcha <dsimcha yahoo.com> 2010-08-15 21:28:28 PDT ---
Is opDot() going to be deprecated once alias this is better-debugged?  I see no
reason why it shouldn't be.  If so, I'll mark this as wontfix.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Aug 15 2010