stdio.lines doesn't have popFront, but works with foreach

Kapps via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Thu Dec 11 12:37:07 PST 2014


On Thursday, 11 December 2014 at 20:11:21 UTC, Andrew Klaassen 
wrote:
> The docs for stdio.lines say that it's a struct.  stdio.lines 
> works with foreach.
>
> The docs for foreach say:
>
> "Iteration over struct and class objects can be done with 
> ranges. For foreach, this means the following properties and 
> methods must be defined: .empty ... .front ... .popFront()"
>
> But when I try to access any of those properties or methods for 
> stdio.lines, I get compilation errors:
>
>   1 import io = std.stdio;
>   2
>   3 void main(string[] args) {
>   4
>   5     auto infile = io.File(args[1], "r");
>   6
>   7     auto filelines = io.lines(infile);
>   8
>   9     io.writeln(filelines.front);
>  10     io.writeln(filelines.empty);
>  11     io.writeln(filelines.popFront());
>  12 }
>
> test_filechunking.d(9): Error: no property 'front' for type 
> 'lines'
> test_filechunking.d(10): Error: no property 'empty' for type 
> 'lines'
> test_filechunking.d(11): Error: no property 'popFront' for type 
> 'lines'
>
> Why is this?
>
> I'm using ldc2 for compilation, FWIW.
>
> Andrew

Ranges are one way of allowing foreach. The other is through the 
use of opApply, which is what std.stdio.lines does.

http://dlang.org/statement.html#ForeachStatement


More information about the Digitalmars-d-learn mailing list