On 10/2/16 2:55 AM, Manu via Digitalmars-d wrote:
Can someone explain this to me?class Test { inout(int) f() inout { return 10; } void t() { f(); // calls fine with mutable 'this' auto d = &this.f; // error : inout method Test.f is not callable using a mutable this d(); } } That error message seems very unhelpful, and it's not true. Of course an inout method is callable with a mutable 'this'... I suspect that the problem is the type for the delegate; "inout(int) delegate()" doesn't leave anything for the type system to resolve the inout with. I guess the expectation is that this delegate has it's inout-ness resolved when you capture the delegate: is(typeof(&this.f) == int delegate()) Or if 'this' were const: is(typeof(&this.f) == const(int) delegate())
I think this is a bug, and I 100% agree with you. The type of the delegate should be based on the mutability of 'this'.
The error message probably stems from logic that was meant to prevent invalid const/immutable delegate capture, but inout wasn't thought of.
-Steve
