inout and opApply

Timon Gehr via Digitalmars-d digitalmars-d at puremagic.com
Thu Jun 23 12:20:30 PDT 2016


On 23.06.2016 14:58, Steven Schveighoffer wrote:
> On 6/21/16 5:19 PM, Timon Gehr wrote:
>
>>
>> The problem here is that both variants make sense depending on context
>> and there is no syntax to distinguish between them. This proposal
>> interacts in a weird way with IFTI.
>
> I know you are probably right, but can you explain maybe via an example
> what you mean? I'm not understanding your point.
>
> -Steve

One might legitimately want to pass a inout delegate to some inout 
function and then use the delegate on data with arbitrary mutability 
qualifiers, not just inout.


The IFTI comment was about for example something like this:

struct S{
     void bar(inout int){}
     void foo(T)(T arg)inout{
         // this looks like it can be called with any argument
         arg(&bar);
     }
}

void main(){
     immutable(S) s;
     void delegate(void delegate(inout(int))) dg = x=>x(2);
     s.foo(dg); // today, this works
     // with the proposed semantics, IFTI deduces
     // T = void delegate(void delegate(inout(int)))
     // but then cannot convert dg to a T after
     // inout resolution
}

But I don't feel strongly about which of the two variants it should be. 
It's weird either way, as long as there can be only one inout in scope.


More information about the Digitalmars-d mailing list