I can understand ``pure``. https://github.com/dlang/phobos/blob/master/std/uni/package.d#L2075It is literally on the constructor.Now @safe I don't know. My best guess would be for some reason the constructor is getting inferred as it (templates get inferred).
What about needing a forward range, not just an input range? It would seem it just needs to iterate through a sequence of pairs of integers.