digitalmars.D.bugs - [Issue 8062] New: UFCS and operator overloading
- d-bugmail puremagic.com (35/35) May 08 2012 http://d.puremagic.com/issues/show_bug.cgi?id=8062
 - d-bugmail puremagic.com (12/12) May 31 2012 http://d.puremagic.com/issues/show_bug.cgi?id=8062
 - d-bugmail puremagic.com (11/15) Jun 13 2012 http://d.puremagic.com/issues/show_bug.cgi?id=8062
 - d-bugmail puremagic.com (8/14) Jun 13 2012 http://d.puremagic.com/issues/show_bug.cgi?id=8062
 - d-bugmail puremagic.com (10/13) Jun 13 2012 http://d.puremagic.com/issues/show_bug.cgi?id=8062
 - d-bugmail puremagic.com (8/19) Jun 13 2012 http://d.puremagic.com/issues/show_bug.cgi?id=8062
 
http://d.puremagic.com/issues/show_bug.cgi?id=8062
           Summary: UFCS and operator overloading
           Product: D
           Version: D2
          Platform: x86_64
        OS/Version: Linux
            Status: NEW
          Severity: normal
          Priority: P2
         Component: DMD
        AssignedTo: nobody puremagic.com
        ReportedBy: jens.k.mueller gmx.de
According to TDPL (p. 388, Table 12.1)
a + b
is rewritten to
a.opBinary!("+")(b) or b.opBinaryRight!("+")(a)
Considering operator overloading together with UFCS leads to the following
wrong behavior.
struct Foo {}
Foo opBinary(string op)(Foo lhs, Foo rhs) if (op == "+")
{   
    return Foo.init;
}
unittest
{   
    Foo a, b;
    a + b; // fails to compile even though it should
}
If a + b is rewritten to a.opBinary!("+")(b) first, then UFCS should rewrite it
further to opBinary!("+")(a,b). But it seems UFCS is not considered. UFCS
should be carried out when the operator is being rewritten.
-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
 May 08 2012
http://d.puremagic.com/issues/show_bug.cgi?id=8062
Dmitry Olshansky <dmitry.olsh gmail.com> changed:
           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |dmitry.olsh gmail.com
06:21:54 PDT ---
As defined t shouldn't:
UFCS presently only does go from fn(a,b, ...) -> a.fn(b, ...); way.
And arguably rightfully so, as it already may introduce some hijacking.
-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
 May 31 2012
http://d.puremagic.com/issues/show_bug.cgi?id=8062
timon.gehr gmx.ch changed:
           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |timon.gehr gmx.ch
 As defined t shouldn't:
 UFCS presently only does go from fn(a,b, ...) -> a.fn(b, ...); way.
 
Well, no. UFCS transforms a.fn(b, ...) to fn(a,b, ...).
 And arguably rightfully so, as it already may introduce some hijacking.
-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
 Jun 13 2012
http://d.puremagic.com/issues/show_bug.cgi?id=8062 12:22:05 PDT ---My bad, I actually meant it a.fn ---> fn(a,...) way. Which brings us to the point - request is Invalid then? -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------As defined t shouldn't: UFCS presently only does go from fn(a,b, ...) -> a.fn(b, ...); way.Well, no. UFCS transforms a.fn(b, ...) to fn(a,b, ...).
 Jun 13 2012
http://d.puremagic.com/issues/show_bug.cgi?id=8062My bad, I actually meant it a.fn ---> fn(a,...) way. Which brings us to the point - request is Invalid then?I don't think it is invalid. a + b -> a.opBinary!"+"(b) -> opBinary!"+"(a, b); Probably this is on the borderline between bug and enhancement request -- I think the documentation can be interpreted either way. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
 Jun 13 2012
http://d.puremagic.com/issues/show_bug.cgi?id=8062Which documentation are you referring to? I don't think this is an enhancement. How can it be an enhancement? Are there exceptions when UFCS has to be applied? -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------My bad, I actually meant it a.fn ---> fn(a,...) way. Which brings us to the point - request is Invalid then?I don't think it is invalid. a + b -> a.opBinary!"+"(b) -> opBinary!"+"(a, b); Probably this is on the borderline between bug and enhancement request -- I think the documentation can be interpreted either way.
 Jun 13 2012








 
 
 
 d-bugmail puremagic.com 