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