[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