<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body dir="auto"><div><br></div><div>On Jan 31, 2017, at 11:32, Jaden Geller via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a>&gt; wrote:<br><br></div><blockquote type="cite"><div><span>I think that is perfectly reasonable, but then it seems weird to be able to iterate over it (with no upper bound) independently of a collection). It would surprise me if</span><br><span>```</span><br><span>for x in arr[arr.startIndex…] { print(x) }</span><br><span>```</span><br><span>yielded different results than</span><br><span>```</span><br><span>for i in arr.startIndex… { print(arr[i]) } // CRASH</span><br><span>```</span><br><span>which it does under this model.</span><br></div></blockquote><br><div>(I <i>think</i> this how it works... semantically, anyway) Since the upper bound isn't specified, it's inferred from the context.</div><div><br></div><div>In the first case, the context is as an index into an array, so the upper bound is inferred to be the last valid index.</div><div><br></div><div>In the second case, there is no context, so it goes to Int.max. Then, <i>after</i> the "wrong" context has been established, you try to index an array with numbers from the too-large range.</div><div><br></div><div>Semantically speaking, they're pretty different operations. Why is it surprising that they have different results?</div><div><br></div><div>- Dave Sweeris&nbsp;</div></body></html>