digitalmars.D.bugs - [Issue 13124] New: std.algorithm.until with not-boolean predicates too
- via Digitalmars-d-bugs (43/43) Jul 13 2014 https://issues.dlang.org/show_bug.cgi?id=13124
https://issues.dlang.org/show_bug.cgi?id=13124 Issue ID: 13124 Summary: std.algorithm.until with not-boolean predicates too Product: D Version: D2 Hardware: x86 OS: Windows Status: NEW Keywords: rejects-valid Severity: normal Priority: P1 Component: Phobos Assignee: nobody puremagic.com Reporter: bearophile_hugs eml.cc This code: void main() { import std.stdio, std.algorithm; auto s = "abcacaacba"; s.filter!(c => c.among!('a', 'b')).writeln; } Outputs: abaaaba While this code: void main() { import std.stdio, std.algorithm; auto s = "hello how\nare you"; s.until!(c => c.among!('\n', '\r')).writeln; } Gives with dmd 2.066beta3: ...\dmd2\src\phobos\std\algorithm.d(5690,33): Error: cannot implicitly convert expression (__lambda1(front(this._input))) of type uint to bool test.d(4,7): Error: template instance test.main.until!((c) => c.among!('\x0a', '\x0d'), string) error instantiating So I suggest to improve std.algorithm.until, to allow that code. Timon Gehr comments: private bool predSatisfied() // <-- don't say bool here { static if (is(Sentinel == void)) return unaryFun!pred(_input.front); // or cast here else return startsWith!pred(_input, _sentinel); // and here } --
Jul 13 2014