On Thursday, 28 August 2025 at 11:54:10 UTC, Brother Bill wrote:
If line 9 of the program is commented out, it runs fine.
Otherwise lots of error messages which don't pan out for me.
I tried changing Negative.front to be const, which didn't help.
I am not quite sure what the error messages are telling me.

Thank you for your assistance!

```
C:\D\dmd2\windows\bin64\..\..\src\phobos\std\range\package.d(4560): Error: 
mutable method `app.Negative!(Take!(FibonacciSeries)).Negative.front` is not 
callable using a `const` object
                return _current.front;
                       ^
c:\dev\D\81 - 90\c82_1e_InputRange_does_support_cycle_with_save\source\app.d(44): Consider adding `const` or `inout` here
    auto front()
         ^
C:\D\dmd2\windows\bin64\..\..\src\phobos\std\range\package.d(4695): Error: 
template instance `std.range.Cycle!(Negative!(Take!(FibonacciSeries)))` error 
instantiating
    else return Cycle!R(input);
                ^
c:\dev\D\81 - 90\c82_1e_InputRange_does_support_cycle_with_save\source\app.d(9): instantiated from here: `cycle!(Negative!(Take!(FibonacciSeries)))`
            .cycle      // ← compilation ERROR
            ^
```
This looks like a bug in the library or the compiler.

This code is the code that is failing:

```d
        static if (is(typeof((cast(const R)_current).front)))
        {
            /// ditto
            @property auto ref front() const
            {
                return _current.front;
            }
        }
```

What the intent looks to me like is, if `_current.front` can be called on a const object, then we can forward the const-ness by declaring a const-allowing `front` function.

Well, looking at the `Negative.front` function, I see no attribute of `const`.

There is something sutble here as well. `is(typeof(funcname))` does not check if `funcname` is valid as an *expression*, but as a *symbol*.

And part of this also is that you are forming an rvalue, which has different implications for pure value types (which this whole thing is).

If I change that test to `static if (is(typeof((cast(const R*)&_current).front)))` then the code works. But I'm not sure if there's still not a compiler bug somewhere.

Will file an issue, and we should get this fixed.

-Steve

Reply via email to