diff --git a/std/algorithm/iteration.d b/std/algorithm/iteration.d index eef4bea9b..006217c7c 100644 --- a/std/algorithm/iteration.d +++ b/std/algorithm/iteration.d @@ -3796,7 +3796,7 @@ if (is(typeof(binaryFun!pred(r.front, s)) : bool) import std.algorithm.searching : find; import std.conv : unsigned; - static struct Result + struct Result { private: Range _input; @@ -3817,7 +3817,7 @@ if (is(typeof(binaryFun!pred(r.front, s)) : bool) static if (isBidirectionalRange!Range) { - static size_t lastIndexOf(Range haystack, Separator needle) + size_t lastIndexOf(Range haystack, Separator needle) { import std.range : retro; auto r = haystack.retro().find!pred(needle); @@ -4142,6 +4142,23 @@ if (is(typeof(binaryFun!pred(r.front, s)) : bool) assert(s.empty); } +@safe unittest // issue 18470 +{ + import std.algorithm.comparison : equal; + + const w = [[0], [1], [2]]; + assert(w.splitter!((a, b) => a.front() == b)(1).equal([[[0]], [[2]]])); +} + +@safe unittest // issue 18470 +{ + import std.algorithm.comparison : equal; + import std.ascii : toLower; + + assert("abXcdxef".splitter!"a.toLower == b"('x').equal(["ab", "cd", "ef"])); + assert("abXcdxef".splitter!((a, b) => a.toLower == b)('x').equal(["ab", "cd", "ef"])); +} + /// ditto auto splitter(alias pred = "a == b", Range, Separator)(Range r, Separator s) if (is(typeof(binaryFun!pred(r.front, s.front)) : bool)