inout delegate

Manu via Digitalmars-d digitalmars-d at puremagic.com
Sun Oct 2 20:06:49 PDT 2016


On 3 October 2016 at 02:00, Steven Schveighoffer via Digitalmars-d
<digitalmars-d at puremagic.com> wrote:
> 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

Okay, well my current project is blocked on this. I can't progress.
https://issues.dlang.org/show_bug.cgi?id=16572


More information about the Digitalmars-d mailing list