www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 18842] New: Wrong type for pointers to member functions

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 puremagic.com
          Reporter: Ajieskola 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.

--
May 08 2018