Bug 5403 – foreach requires front to be a function in a range
Status
RESOLVED
Resolution
FIXED
Severity
normal
Priority
P2
Component
dmd
Product
D
Version
D2
Platform
All
OS
All
Creation time
2011-01-03T07:25:00Z
Last change time
2012-07-14T19:27:03Z
Keywords
pull, rejects-valid
Assigned to
nobody
Creator
schveiguy
Comments
Comment #0 by schveiguy — 2011-01-03T07:25:54Z
This is a valid range:
import std.range;
struct S
{
int front;
bool empty;
void popFront() {empty = true;}
}
static assert(isInputRange!S); // compiles
But this fails:
void main()
{
S s;
foreach(int i; s) { }
}
fails with the following error:
Error: no property 'opApply' for type 'S'
Error: opApply() function for S must return an int
Change front to:
@property int front() {return 0;}
and it compiles. Clearly empty is not required to be a function, and there is no mention of any function requirements in the spec, it's just stated that they must be properties.
Comment #1 by yebblies — 2011-06-15T22:52:08Z
*** Issue 3295 has been marked as a duplicate of this issue. ***