Thread overview
Reason for 'static struct'
Dec 09, 2015
Jon D
Dec 09, 2015
Daniel Kozák
Dec 09, 2015
Jon D
Dec 10, 2015
Daniel Kozak
December 09, 2015
There is a fair bit of range related code in the standard library structured like:

    auto MyRange(Range)(Range r)
        if (isInputRange!Range)
     {
        static struct Result
        {
            private Range source;
            // define empty, front, popFront, etc
        }
        return Result(r);
    }

I'm curious about what declaring the Result struct as 'static' does, and if there are use cases where it be better to exclude the static qualifier.

--Jon
December 09, 2015
V Wed, 09 Dec 2015 21:10:43 +0000
Jon D via Digitalmars-d-learn <digitalmars-d-learn@puremagic.com>
napsáno:

> There is a fair bit of range related code in the standard library structured like:
> 
>      auto MyRange(Range)(Range r)
>          if (isInputRange!Range)
>       {
>          static struct Result
>          {
>              private Range source;
>              // define empty, front, popFront, etc
>          }
>          return Result(r);
>      }
> 
> I'm curious about what declaring the Result struct as 'static' does, and if there are use cases where it be better to exclude the static qualifier.
> 
> --Jon

It make it non-nested struct: https://dlang.org/spec/struct.html#nested

December 09, 2015
On Wednesday, 9 December 2015 at 21:23:03 UTC, Daniel Kozák wrote:
> V Wed, 09 Dec 2015 21:10:43 +0000
> Jon D via Digitalmars-d-learn <digitalmars-d-learn@puremagic.com>
> napsáno:
>
>> There is a fair bit of range related code in the standard library structured like:
>> 
>>      auto MyRange(Range)(Range r)
>>          if (isInputRange!Range)
>>       {
>>          static struct Result
>>          {
>>              private Range source;
>>              // define empty, front, popFront, etc
>>          }
>>          return Result(r);
>>      }
>> 
>> I'm curious about what declaring the Result struct as 'static' does, and if there are use cases where it be better to exclude the static qualifier.
>> 
>> --Jon
>
> It make it non-nested struct: https://dlang.org/spec/struct.html#nested

Thanks. So, is in the example above, would the advantage be that 'static' avoids saving the enclosing state, which is not needed?
December 10, 2015
Yes, exactly. Some people even use static if it is not needed because it is
harmless. And remove it only when enclosing context is demand.
Dne 9. 12. 2015 22:40 napsal uživatel "Jon D via Digitalmars-d-learn" <
digitalmars-d-learn@puremagic.com>:

> On Wednesday, 9 December 2015 at 21:23:03 UTC, Daniel Kozák wrote:
>
>> V Wed, 09 Dec 2015 21:10:43 +0000
>> Jon D via Digitalmars-d-learn <digitalmars-d-learn@puremagic.com>
>> napsáno:
>>
>> There is a fair bit of range related code in the standard library
>>> structured like:
>>>
>>>      auto MyRange(Range)(Range r)
>>>          if (isInputRange!Range)
>>>       {
>>>          static struct Result
>>>          {
>>>              private Range source;
>>>              // define empty, front, popFront, etc
>>>          }
>>>          return Result(r);
>>>      }
>>>
>>> I'm curious about what declaring the Result struct as 'static' does, and if there are use cases where it be better to exclude the static qualifier.
>>>
>>> --Jon
>>>
>>
>> It make it non-nested struct: https://dlang.org/spec/struct.html#nested
>>
>
> Thanks. So, is in the example above, would the advantage be that 'static' avoids saving the enclosing state, which is not needed?
>