Thread overview
Delegate type inferred as pure
Jan 28, 2013
cal
Jan 28, 2013
qznc
Jan 28, 2013
cal
Jan 28, 2013
Kenji Hara
January 28, 2013
This fails:

void main() {
    int z;
    typeof((int a){return z;}) dg;
    dg = (int a) {return z;};
}

Error: cannot implicitly convert expression (__lambda2) of type int delegate(int a) nothrow @safe to int delegate(int a) pure nothrow @safe

But I can't make the delegate pure:
dg = (int a) pure {return z;};
because it references z.

Is the 'typeof((int a){return z;})' getting it wrong here?
January 28, 2013
On Monday, 28 January 2013 at 03:16:24 UTC, cal wrote:
> This fails:
>
> void main() {
>     int z;
>     typeof((int a){return z;}) dg;
>     dg = (int a) {return z;};
> }
>
> Error: cannot implicitly convert expression (__lambda2) of type int delegate(int a) nothrow @safe to int delegate(int a) pure nothrow @safe
>
> But I can't make the delegate pure:
> dg = (int a) pure {return z;};
> because it references z.
>
> Is the 'typeof((int a){return z;})' getting it wrong here?

Do you really need the type? You could just use "auto".

auto dg = (int a) {return z;};
January 28, 2013
On Monday, 28 January 2013 at 03:16:24 UTC, cal wrote:
> This fails:
>
> void main() {
>     int z;
>     typeof((int a){return z;}) dg;
>     dg = (int a) {return z;};
> }
>
> Error: cannot implicitly convert expression (__lambda2) of type int delegate(int a) nothrow @safe to int delegate(int a) pure nothrow @safe
>
> But I can't make the delegate pure:
> dg = (int a) pure {return z;};
> because it references z.
>
> Is the 'typeof((int a){return z;})' getting it wrong here?

Filed:
http://d.puremagic.com/issues/show_bug.cgi?id=9415
January 28, 2013
On Monday, 28 January 2013 at 10:44:22 UTC, qznc wrote:
> On Monday, 28 January 2013 at 03:16:24 UTC, cal wrote:
>> Is the 'typeof((int a){return z;})' getting it wrong here?
>
> Do you really need the type? You could just use "auto".
>
> auto dg = (int a) {return z;};

Yeah this is reduced from something I'd like to use typeof for, usually auto would be fine like you say.