Not necessarilly: For starters, `front` is completely optional. `walkFront` will not call it, for example.

As for empty, it is *also* optional, as long as you know it "would" produce false if called. `takeExaclty` exploits this, for example.

take this code
```D
dstring myDstring = "..."d;
size_t n = myDstring.byChar().walkLength();
auti r = myDstring.byChar().takeExactly(n);
```

Perfectly valid, but will break. As a matter of fact, it'll be "insidious" breakage, since takeExactly will call `empty`... but only in debug.

So your range will start failing once you use it in release :/

Also, all your ranges are missing `save`, is this intended?