http://d.puremagic.com/issues/show_bug.cgi?id=8061
--- Comment #5 from [email protected] 2012-12-19 22:34:41 PST --- Found cause of problem: in std.format.formatRange(), there's a static if block that reads: ... else static if (isForwardRange!T && !isInfinite!T) auto len = walkLength(val.save); If this line is artificially modified to set len to some fixed value (say, the length of the joined string), then the OP's code works. This implies that val.save did not *really* save the range; it returned a copy that, when consumed, also consumes the original range. Digging deeper into the joiner code, the criteria for the joined range to be a forward range is if the range of ranges passed to joiner is both itself a forward range, and its subranges are also forward ranges. In theory, if these two conditions were really true, then the joined range should be a valid forward range. So this indicates that the problem lies with the array of InputRangeObjects passed to joiner. And here we discover the root of the problem: std.array.save, which defines .save for built-in arrays, always just returns the array, whereas the correct implementation would be to call .save on all array elements (if they are forward ranges). -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
