www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - UFCS

reply Manfred Nowak <svv1999 hotmail.com> writes:
The following gives:
"Error: 'a += b' is not a scalar, it is a C"
although UFCS should engage.

-manfred

class C{}
int main(){
  void opOpAssign( string op)( C a, C b){
  }
  C a, b;
  a+= b;
}
May 15 2015
next sibling parent Timon Gehr <timon.gehr gmx.ch> writes:
On 05/15/2015 11:31 PM, Manfred Nowak wrote:
 class C{}
 int main(){
    void opOpAssign( string op)( C a, C b){
    }
    C a, b;
    a+= b;
 }
https://issues.dlang.org/show_bug.cgi?id=8062
May 15 2015
prev sibling parent reply Jonathan M Davis via Digitalmars-d-learn writes:
On Friday, May 15, 2015 21:31:35 Manfred Nowak via Digitalmars-d-learn wrote:
 The following gives:
 "Error: 'a += b' is not a scalar, it is a C"
 although UFCS should engage.

 -manfred

 class C{}
 int main(){
   void opOpAssign( string op)( C a, C b){
   }
   C a, b;
   a+= b;
 }
Overloaded operators have to be defined as part of the type that they're overloading the operator for, and UFCS is only ever used with the . syntax. So, this isn't a bug. - Jonathan M Davis
May 15 2015
next sibling parent Manfred Nowak <svv1999 hotmail.com> writes:
Jonathan M Davis wrote:

 UFCS is only ever used with the . syntax
The docs say so. Thx. -manfred
May 16 2015
prev sibling parent "Marc =?UTF-8?B?U2Now7x0eiI=?= <schuetzm gmx.net> writes:
On Saturday, 16 May 2015 at 05:56:26 UTC, Jonathan M Davis wrote:
 On Friday, May 15, 2015 21:31:35 Manfred Nowak via 
 Digitalmars-d-learn wrote:
 The following gives:
 "Error: 'a += b' is not a scalar, it is a C"
 although UFCS should engage.

 -manfred

 class C{}
 int main(){
   void opOpAssign( string op)( C a, C b){
   }
   C a, b;
   a+= b;
 }
Overloaded operators have to be defined as part of the type that they're overloading the operator for, and UFCS is only ever used with the . syntax. So, this isn't a bug.
Besides, UFCS doesn't work with local functions either; `opOpAssign()` would need to be moved out of `main()`.
May 16 2015