On Monday, 21 September 2015 at 20:33:10 UTC, Jack Stouffer wrote:
pragma(msg, isInputRange!(typeof(a)));
try:
pragma(msg, isInputRange!(typeof(a[])));
Notice the addition of the [] after the a. That's the slicing
operator and it will yield a range.
Is there an actual reason for this?
A static array is a container; a block of memory. A range is a
*view* into a container. When you popFront a range, you aren't
modifying the underlying memory, you are just advancing the view
to the next element. popFront of a static array is impossible
anyway due to the immutability of its length, but even if it was
possible, advancing your view to the next item should not
actually delete the item if at all possible.
Dynamic arrays are actually similar btw, the underlying container
for them is just hidden from view because the garbage collector
manages it, so all you see is the slice (view/range).