dsimcha wrote:
Ranges are just pretty much an implicit compile-time interface. As Ary put it, compile time duck typing is a pretty accurate description. Basically, a range doesn't have to *be* a specific *type*, it just has to support certain specific *operations*, namely front, popFront, and empty. As long as it *has* these operations, and they compile and return what they're supposed to (ElementType!(T) for front(), void for popFront() and bool for empty), it doesn't matter what type it *is*.
What I don't get is how this (definition) may work on tree based structures. To me it seems that ranges work fine on "linear" data types (whatever) lists, but well, as said I don't get it. :(
