If you are in the mood to change the object, then I think it would be safer to do it via a public `source` member (such as for `retro`). I think it needs to be crystal clear that the element being iterated is not the one used to initialize the range. The code I worry about is:

```D
void doubleMyStuff(R)(R r)
{
    for ( ; !r.empty ; r.popFront)
        f.front = r.front*2;
}

int myValue = 5;
//doubleMyStuff(myValue);  //I can't do this, because doubleMyStuff only takes ranges. How inconvenient!
doubleMyStuff(only(myValue)); //Which is why I use this nifty adaptor called Only
assert(myValue == 10); //Does this pass ?
```

That said, If we *do* want to have a mutable `Only`, then maybe we should consider having a `RefOnly` ? It would provide ref access to front, and carry a `T*` (as opposed to a `T`).

Just the same way we have `RefAppender` I guess. But just like `RefAppender`, the user needs to be super careful to not let the original object exit the scope where the `RefOnly` is declared...