On Sunday, 2 June 2013 at 04:10:15 UTC, Jonathan M Davis wrote:
On Sunday, June 02, 2013 04:57:53 Meta wrote:
The callable bit won't work. It'll just call front. You'd have
to do something
like
static if(isCallable!(ElementType!R))
r.front()();
Also, if front were pure, then calling it and doing nothing
with its return
value would result in a compilation error. The same goes if the
element type
is a pure callable.
Calling front is kind of the point of exhaust(), otherwise you'd
use takeNone(). You wouldn't use this if front were pure because
the only reason you'd want exhaust is if you were (ab)using side
effects (like I was the other day on D.learn). Having it error
out if you were using it on a range with pure front() is actually
a good thing because you've made some error in your reasoning if
you think you want exhaust() to run in that situation.
processSideEffects() is probably too long of name.
And even if this did work exactly as you intended. I think
that assuming that someone exhausting the range would would
what front returns
to be called is a bad idea. Maybe they do, maybe they don't,
I'd expect that
in most cases, they wouldn't. If that's what they want, they
can call map
before calling exhaust.
Sticking a map before exhaust without it calling front() would
accomplish nothing. I know this because my own little toy eat()
just called popFront() originally on a Map range and nothing
happened. You'd be skipping map's function if you don't call
front.