Operator overloading through UFCS doesn't work

Elie Morisse via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Wed May 25 08:46:23 PDT 2016


On Tuesday, 24 May 2016 at 23:43:46 UTC, Jonathan M Davis wrote:
> On Tuesday, May 24, 2016 23:19:32 Elie Morisse via 
> Digitalmars-d-learn wrote:
>> On Saturday, 13 October 2012 at 22:58:56 UTC, Timon Gehr wrote:
>> > Afaik free-function operator overloads (but not in the 
>> > context of UFCS) were considered and turned down because D 
>> > did not want to get amidst discussions about adding Koenig 
>> > lookup. UFCS does not do Koenig lookup.
>>
>> I don't get it, aren't the current symbol lookup rules enough 
>> to make free function operator overloads useful? To me it 
>> looks like they are.
>>
>> Sorry for digging up this thread, just getting irritated by a 
>> restriction that seems pointless and arbitrary.
>>
>> Overloaded operators would suffer from the same potential 
>> abuses other methods are subjected to if UFCS was enabled, 
>> nothing more as far as I can see.
>
> If UFCS doesn't work, because there are two free functions with 
> the same name which take the same arguments, then you can 
> differentiate between them by not using UFCS and using their 
> full import paths, or you can alias them so that they don't 
> have the same name. Neither of those would be possible with 
> operator overloading. If overloaded operators were allowed as 
> free functions, then if there were ever a symbol conflict, 
> you'd be screwed.
>
> - Jonathan M Davis

   X.FreeFunc(Y); // multiple matches error
   ModuleA.FreeFunc(X, Y); // ok

   X * Y; // multiple matches error
   ModuleA.opBinary!'*'(X, Y); // ok

Is there much of a difference between the two?


More information about the Digitalmars-d-learn mailing list