On Tuesday, 11 January 2022 at 17:55:28 UTC, H. S. Teoh wrote:
Generally, I'd advise not conflating your containers with ranges over your containers: I'd make .opSlice return a traditional D slice (i.e., const(char)[]) instead of a FixedString, and just require writing `[]` when you need to iterate over the string as a range:

        FixedString!64 mystr;
        foreach (ch; mystr[]) { // <-- iterates over const(char)[]
                ...
        }

This way, no redundant copying of data is done during iteration.

It already does this. In D2, `[]` is handled by a zero-argument `opIndex` overload, not by `opSlice`. [1] FixedString has such an overload [2], and it does, in fact, return a slice.

[1] https://dlang.org/spec/operatoroverloading.html#slice
[2] https://github.com/Moth-Tolias/fixedstring/blob/v1.0.0/source/fixedstring.d#L105

Reply via email to