DIP30, delegates more destruction for your pleasure

deadalnix deadalnix at gmail.com
Thu Mar 14 20:48:24 PDT 2013


On Thursday, 14 March 2013 at 21:29:26 UTC, Timon Gehr wrote:
> int foo(int delegate() dg){ return dg(); }
>
> void main(){
>     foo(delegate()=>2); // error, int delegate()pure immutable
>                         // does not convert to int delegate()
> }
>

That make sense. The rules have to be loosened.

> Guarantees about const pure functions are lost. This is new. 
> (Assuming a sound implementation.)
>

Yes. This is still better than hole in the type system IMO.

> It's just the combination of const and inout.
> It behaves in the straightforward fashion.
>
> inout is a wildcard standing for mutable, const or immutable.
>
> inout is mutable   => const(inout) = const
> inout is const     => const(inout) = const(const) = const
> inout is immutable => const(inout) = const(immutable) = 
> immutable
>
> Hence const(inout) can be seen as a wildcard standing for const 
> or immutable (but that's just derived information). Identifying 
> const(inout) with const, as DMD does it, gratuitously loses 
> type information.

I see. Type qualifier come at high cost, so I'm not sure.


More information about the Digitalmars-d mailing list