Bug 18842 – Wrong type for pointers to member functions

Status
NEW
Severity
normal
Priority
P3
Component
dmd
Product
D
Version
D2
Platform
All
OS
All
Creation time
2018-05-08T07:58:32Z
Last change time
2024-12-13T18:58:38Z
Assigned to
No Owner
Creator
Ate Eskola
Moved to GitHub: dmd#19433 →

Comments

Comment #0 by Ajieskola — 2018-05-08T07:58:32Z
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
THIS ISSUE HAS BEEN MOVED TO GITHUB https://github.com/dlang/dmd/issues/19433 DO NOT COMMENT HERE ANYMORE, NOBODY WILL SEE IT, THIS ISSUE HAS BEEN MOVED TO GITHUB