Bring back foreach int indexes

Johan j at j.nl
Thu Nov 30 18:26:55 UTC 2023


On Wednesday, 29 November 2023 at 15:48:25 UTC, Steven 
Schveighoffer wrote:
> On Wednesday, 29 November 2023 at 14:56:50 UTC, Steven 
> Schveighoffer wrote:
>> I don’t know how many times I get caught with size_t indexes 
>> but I want them to be int or uint. It’s especially painful in 
>> my class that I’m teaching where I don’t want to yet explain 
>> why int doesn’t work there and have to introduce casting or 
>> use to!int. All for the possibility that I have an array 
>> larger than 2 billion elements.
>>
>> I am forgetting why we removed this in the first place.
>>
>> Can we have the compiler insert an assert at the loop start 
>> that the bounds are in range when you use a smaller int type? 
>> Clearly the common case is that the array is small enough for 
>> int indexes.
>
>
> For those who are unaware, this used to work:
>
> ```d
> auto arr = [1, 2, 3];
> foreach(int idx, v; arr) {
>     ...
> }
> ```
>
> But was removed at some point. I think it should be brought 
> back (we are bringing stuff back now, right? Like hex strings?)

- What about the other integer types?  (uint, short, byte, char?)
- What if `arr.length >= int.max` ? Does the loop become 
infinite, or does the loop counter stay `size_t` (not accessible 
by user) and it is cast to `int` (`idx`) upon every iteration ?

-Johan



More information about the Digitalmars-d mailing list