[Issue 18842] New: Wrong type for pointers to member functions
    d-bugmail at puremagic.com 
    d-bugmail at puremagic.com
       
    Tue May  8 07:58:32 UTC 2018
    
    
  
https://issues.dlang.org/show_bug.cgi?id=18842
          Issue ID: 18842
           Summary: Wrong type for pointers to member functions
           Product: D
           Version: D2
          Hardware: All
               URL: http://dlang.org/
                OS: All
            Status: NEW
          Severity: normal
          Priority: P3
         Component: dmd
          Assignee: nobody at puremagic.com
          Reporter: Ajieskola at gmail.com
When referencing a non-static member function without using an instance to that
type, the typecheck malfunctions:
import std.stdio;
struct IntPair
{   int a;
    int b;
    IntPair opBinary(string op)(IntPair other)
    {   return IntPair
        (   mixin("a " ~ op ~ " other.a"),
            mixin("b " ~ op ~ " other.b")
        );
    }
}
void main()
{   auto val = IntPair(3, 10);
    //One would think it works like this, does not compile
    //IntPair function(ref IntPair, IntPair) fp = &IntPair.opBinary!"+";
    //val.fp(val).writeln;
    //this compiles and causes undefined behaviour.
    IntPair function(IntPair) fp = &IntPair.opBinary!"+";
    fp(val).writeln;
    readln;
}
With D, of course you would prefer using lambdas in cases like this, and using
@safe prevents doing this. But I still see no reason why you should be able to
call a member funtion pointer without a member, but not with one.
--
    
    
More information about the Digitalmars-d-bugs
mailing list