I shall start this again from scratch. Please excuse me for being thick about
it. I have tried before in more direct questions to Andrei, but in the end all
I got was a snotty email telling me not to be a nuisance and RTFD.
Unfortunately, the relevant documentation seems to have disappeared.
In range.d, in the context of isInputRange, it says:
"Returns $(D true) if $(D R) is an input range. An input range must
define the primitives $(D empty), $(D popFront), and $(D front). The
following code should compile for any input range ..."
template isInputRange(R)
{
enum bool isInputRange = is(typeof(
{
R r; // can define a range object
if (r.empty) {} // can test for empty
r.popFront; // can invoke next
auto h = r.front; // can get the front of the range
}()));
}
I can not possibly be the only D enthusiast who finds this completely
incomprehensible. What is a range? Is it a template interface, or is it just a
trick of template syntax that supports the old assertion that "nobody really
understands templates".
If ranges are to be a feature of the D language, then they should probably be
supported at language level rather than by some trick that has been discovered
by experimenting with how far you can push templates.
Also, it would be very useful to have some indication of what you might use
them for. I occasionally had to resort to STL iterators because I wanted to use
'map'. I agree that the syntax sucked, but nobody is telling me how ranges help.
I realize that some people with an IQ of 580 will find my questions naive and
misguided - not to mention impertinent, but it seems to me that one of the
responsibilities of being a leader is to explain to less gifted followers what
the fuck is going on. Or maybe I've got it wrong - if you're that bright (sorry
Walter - not you) then perhaps it's just a big ego trip.