std.algorithm.splitter defect: isTerminator version does not return	BiderectionalRand
    monarch_dodra 
    monarch_dodra at gmail.com
       
    Sat Jun 30 04:21:16 PDT 2012
    
    
  
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
    
    
More information about the Digitalmars-d
mailing list