On Thursday, 28 August 2025 at 13:16:26 UTC, Andy Valencia wrote:
On Thursday, 28 August 2025 at 13:09:21 UTC, Brother Bill wrote:
Unable to compile.  Please advise.
```
c:\dev\D\81 - 90\c83_e_static_foreach_fibonacci\source\app.d(8): Error: function declaration without return type. (Note that constructors are always named `this`)
    writeln(n);

writeln() isn't valid at scope 0, which is where that static foreach is putting it. I changed it to pragma(msg, n) and saw the expected sequence of numbers.

Andy

What is "scope 0"?  is this same thing as module scope?

Refactored source/app.d

Output to console:  Why does static foreach run 'twice'?
```
pragma: 0
pragma: 2
pragma: 8
pragma: 34
pragma: 0
pragma: 2
pragma: 8
pragma: 34
main(): 0
main(): 2
main(): 8
main(): 34
```

source/app.d
```
import std.stdio;
import std.range;
import std.algorithm;

static foreach (n; FibonacciSeries().take(10).filter!isEven)
{
    // writeln not valid as module level (scope 0)
    pragma(msg, "pragma: ", n);
}

void main()
{
    foreach (n; FibonacciSeries().take(10).filter!isEven) {
        writeln("main(): ", n);
    }
}

bool isEven(int n) {
    return n % 2 == 0;
}

struct FibonacciSeries
{
    int current = 0;
    int next = 1;
    enum empty = false;
    int front() const
    {
        return current;
    }

    void popFront()
    {
        const nextNext = current + next;
        current = next;
        next = nextNext;
    }

    FibonacciSeries save() const
    {
        return this;
    }
}

```

Reply via email to