On Tuesday, 4 October 2022 at 00:38:25 UTC, Ali Çehreli wrote:
Good catch but I think what we want is a copy of the front
element, at least for InputRanges (.save does not work for
File.byLine :/).
What is the generic way of copying an element? I wonder whether
we have to use isSomeString to take care of all element types.
AFAIK there is no generic way to perform a deep copy of an
arbitrary value in D. You could write a function to do it for all
built-in types, but you might still run into trouble with
user-defined types (e.g., how do you deep-copy a RefCounted!T
without any knowledge of its specific semantics?).
I guess you could use a hybrid approach; e.g.,
static if (isDeepCopyable!(ElementType!R))
auto fr = range.front.deepCopy;
else
auto fr = range.front.save;
This would make it possible to accommodate some pure input ranges
(including File.byLine), but would still require a forward range
in the general case.