delegates that return void + lambdas

Steven Schveighoffer via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Mon Aug 21 05:33:46 PDT 2017


On 8/21/17 8:15 AM, Joshua Hodkinson wrote:
> So I have run across the following issue while working with delegates 
> and lambdas,
> 
> 
> ---
> struct Struct {
>      int prop;
> }
> 
> alias Func = void delegate(ref Struct);
> Func func = (ref s) => s.prop += 1;
> ---
> 
> with compiler error `Error: cannot return non-void from function`
> 
> I understand that the lambda syntax in this case would be short for
> 
> ---
> Func func = (ref s) { return s.prop += 1; };
> ---
> 
> But does this mean you can't have lambdas that return void?
> 
> Thanks

You can return void when your return type is void. When the return type 
is void, you can't return something other than void.

i.e., this should work:

alias Func = int delegate(ref Struct);

Or this:

void foo();

// with your original Func definition
Func func = (ref s) => foo();

You can also do this:

Func func = (ref s) { s += 1; };

-Steve


More information about the Digitalmars-d-learn mailing list