Hello, I have a problem with using std.range.choose():
When using std.range.choose() on a range R, for which
hasElaborateCopyConstructor!R is true, then a postblit for the
result of std.range.choose() is created, which includes a call to
R.__postblit(). However, hasElaborateCopyConstructor!R may be
true, even if R does not define this(this), for example in the
case that one of the members of R does so.
The example that I encountered (reduced to a minimum) was the the
following:
import std.stdio : stdin;
import std.range: choose;
void main()
{
ubyte[1][] secondRange;
choose(true, stdin.byChunk(1), secondRange);
}
In this case File defines this(this), but ByChunk does not, so
the above code does not compile.
I think what std.range.choose() does here is completely
unnecessary: When the result of std.range.choose() gets copied,
the underyling range gets copied, and if it implements postblit,
it is automatically called. No need to call it explicitly, right?.