digitalmars.D.bugs - [Issue 18842] New: Wrong type for pointers to member functions
- d-bugmail puremagic.com (41/41) May 08 2018 https://issues.dlang.org/show_bug.cgi?id=18842
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