Seems to me like this *also* needs `isRandomAccessRange!Range`.

Come to think about it, they *all* require `isRandomAccessRange!Range`. It might be simpler to place them all inside a `static if(isRandomAccessRange!Range)` ? While we are at it, I figure it'd be even simpler to define it as:
```D
static if (isRandomAccessRange!Range)
private size_t getTransitionIndex(SearchPolicy sp, alias test, V)(V v)
{
    static if (sp == SearchPolicy.binarySearch)
        ...
    else static if (sp == SearchPolicy.linear)
        ...
}
```

But that's just details I guess. The important point is that this overload requires randome access.