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.
Comment #1 by robert.schadek — 2024-12-13T18:58:38Z