Bug 5604 – Clarify whether this is a bug or a feature
Status
RESOLVED
Resolution
INVALID
Severity
normal
Priority
P2
Component
dmd
Product
D
Version
D2
Platform
Other
OS
Windows
Creation time
2011-02-17T08:30:00Z
Last change time
2011-02-17T11:28:01Z
Keywords
spec
Assigned to
nobody
Creator
dsimcha
Comments
Comment #0 by dsimcha — 2011-02-17T08:30:33Z
The following code compiles in 64-bit mode and arguably shouldn't (but arguably should).
void main() {
int[] foo;
foreach(uint i, elem; foo) {}
}
The index variable into foo is technically a size_t, not a uint. On the other hand this is arguably a feature. The idiomatic way to write a foreach loop is with implicit variable typing. The insertion of an explicit type is, IMHO, equivalent to using an explicit cast, and therefore it arguably should compile.
Personally, I prefer this to be considered a feature rather than a bug, but either way I think it's important that the spec be clarified, as I've used this idiom in several places when porting code to 64-bit.
Comment #1 by bugzilla — 2011-02-17T10:52:26Z
It's a feature, as you can still use uints to index an array in 64 bit code.
Comment #2 by schveiguy — 2011-02-17T11:28:01Z
I really expected this to be a bug. Because I would expect this to fail:
struct S
{
int opApply(int delegate(ref size_t idx, ref int val) dg)
{
return 0;
}
}
void main()
{
S s;
foreach(uint idx, int val; s) {}
}
i.e. you cannot possibly duplicate this 'feature' for a custom structure. But then of course, you cannot duplicate the 'no ref' aspect of the index either.