On Friday, 28 March 2014 at 19:02:48 UTC, H. S. Teoh wrote:
Today I ran into an interesting situation where I have a
function f that
needs to return ranges of different types (but identical
element types):
auto f(A...)(A args) {
...
if (someCondition)
return cartesianProduct(x, y)
.joiner;
else
return cartesianProduct(x, y)
.joiner
.filter!someFilter;
}
This obviously can't compile, because the return types are not
the same.
(Note that someCondition is only known at runtime.) But
abstractly
speaking, it *should* work, because the element type of the
returned
range is identical.
So how would I implement something like this?
T
You could try using std.variant.Algebraic. I've used it
successfully before, but it's a bit clumsy and out of date.