Very hard to find comments around here, sigh. Anyhow, the correct baseline for assessing the retro-based code would be:

```D
for (auto r2 = range.save; !r2.empty; r2.popBack())
{
        if (r2.back != element) break;
        range.popBack();
}
```

This is a hand-written equivalent of the retro-based code (I added `.save` for correctness): uses two ranges and relies on the aliasing between them. It would be a tall order to expect the compiler to understand what's going on and make the code equivalent to the version that uses the original range directly.