You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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.
The text was updated successfully, but these errors were encountered:
Ate Eskola (@dukc) reported this on 2018-05-08T07:58:32Z
Transferred from https://issues.dlang.org/show_bug.cgi?id=18842
Description
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.The text was updated successfully, but these errors were encountered: