The "isTerminator" version of std.algorithm.splitter, eg:
auto splitter(alias isTerminator, Range)(Range input)

Returns an object that is "only" ForwardRange. This is especially weird, since the normal "separator" version is bidirectional. Comparing using a function rather than with a value should have no difference...

This defect "leaks" into std.array.splitter, defined as:

auto splitter(C)(C[] s)
    if(isSomeString!(C[]))
{
    return std.algorithm.splitter!(std.uni.isWhite)(s);
}

Here is some code reproducing it:

----
import std.array;
import std.algorithm;
import std.stdio;

void main()
{
  string s = "  hi!  my name is Monarch  ";
  auto words = std.array.splitter(s);
  if(words.front == "") words.popFront();
  if(words.back == "") words.popBack(); //What???
  foreach(word; words)
    writeln(word);
}
----

Kind regards,
Monarch Dodra

Reply via email to