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.

Reply via email to