Bug 23216 – Better Error Message For foreach_reverse Without Bidirectional Range
Status
RESOLVED
Resolution
FIXED
Severity
enhancement
Priority
P1
Component
dmd
Product
D
Version
D2
Platform
All
OS
All
Creation time
2022-06-27T17:30:21Z
Last change time
2022-07-07T14:16:23Z
Keywords
diagnostic, pull, trivial
Assigned to
No Owner
Creator
Jack Stouffer
Comments
Comment #0 by jack — 2022-06-27T17:30:21Z
When a range is given to foreach_reverse, but it doesn't have back and popBack, DMD gives a confusing error message.
```
import std.algorithm;
import std.stdio;
void main()
{
string a = "This||is||a||test!";
foreach_reverse (word; a.splitter("||"))
writeln(word);
}
```
Gives:
```
Error: invalid `foreach` aggregate `splitter(a, "||")`, define `opApply()`, range primitives, or use `.tupleof`
```
Expected Behavior:
DMD should detect that the given value is an input range print something like
"Error: Input range splitter(a, "||") passed as foreach aggregate. foreach_reverse requires a bidirectional range"
Comment #1 by dlang-bot — 2022-06-28T10:02:40Z
@dkorpel created dlang/dmd pull request #14254 "Fix 23216 - Better error message for foreach_reverse without Bidirectional Range" fixing this issue:
- Fix 23216 - Better error message for foreach_reverse without Bidirectional Range
https://github.com/dlang/dmd/pull/14254
Comment #2 by dlang-bot — 2022-07-07T14:16:23Z
dlang/dmd pull request #14254 "Fix 23216 - Better error message for foreach_reverse without Bidirectional Range" was merged into master:
- cd70e4d053137dfc955cca846eaf221a8584a37f by Dennis Korpel:
Fix 23216 - Better error message for foreach_reverse without Bidirectional Range
https://github.com/dlang/dmd/pull/14254