You should expand the comment a little.
IIUC you use `T.max + 1 == 0` or `T.max + 1 == T.min` as upper limit.
I'm not sure whether this is stable w.r.t. to backend optimizations.
```d
uint upr = 256;
foreach (ubyte val; 0 .. cast(ubyte)upr) {}
```
If the backend eliminated the cast and converts val to a wider type for the `val < upr` conversion instead this could loop infinitely.