Can't call `each` on `retro` with *some* functions

yabobay someone at example.com
Sun Dec 14 12:32:23 UTC 2025


I have this piece of code:

```d
import std.stdio;
import std.container : SList;
import std.algorithm : each;
import std.range : retro;

void frob(const string s) {
     SList!char ll;
     s.retro.each!(c => ll.insertFront(c));
     foreach (c; ll)
         c.write;
     writeln;
}
```

If i remove the call to `retro`, it compiles just fine. If i 
change `each`'s operation to something like `writeln`, it 
compiles just fine. But unchanged, this program will not compile 
and will give this error:

```
test.d:8:12: error: none of the overloads of template 
‘test.frob.each!((c) => ll.insertFront(c)).each’ are callable 
using argument types ‘!()(Result!())’
     8 |     s.retro.each!(c => ll.insertFront(c));
       |            ^
/usr/lib/gcc/x86_64-pc-linux-gnu/15.2.1/include/d/std/algorithm/iteration.d:912:17: note: Candidates are: ‘each(Range)(Range r)’
   with `Range = Result!()`
   must satisfy one of the following constraints:
`       isRangeIterable!Range
        __traits(compiles, typeof(r.front).length)`
   912 |     Flag!"each" each(Range)(Range r)
       |                 ^
/usr/lib/gcc/x86_64-pc-linux-gnu/15.2.1/include/d/std/algorithm/iteration.d:973:17: note:                 ‘each(Iterable)(auto ref Iterable r)’
   with `Iterable = Result!()`
   must satisfy one of the following constraints:
`       isForeachIterable!Iterable
        __traits(compiles, Parameters!(Parameters!(r.opApply)))`
   973 |     Flag!"each" each(Iterable)(auto ref Iterable r)
       |                 ^
```

I'm using GDC.


More information about the Digitalmars-d-learn mailing list