Strange output

Daemon daemon at yahoo.com
Fri Jun 7 12:10:53 PDT 2013


The following program is supposed to print out only numbers that 
are less than 5, yet the number 63 gets printed.

module main;

import std.stdio;
import std.conv;

int main(string[] argv)
{
	auto de = find!(delegate(a) { return a < 5; })([10, 11, 15, 16, 
27, 20, 2, -4, -17, 8, 64, 6]);

	foreach (int b; de[0 .. $])
	{
		writeln(b);
	}
	
	readln();

     return 0;
}

T[] find(alias pred, T)(T[] input)
	if (is(typeof(pred(input[0])) == bool))
{
	for (; input.length > 0; input = input[1 .. $])
	{
		if (pred(input[0]))
		{
			break;
		}
	}
	return input;
}

I realize it's extremely improbable that I've discovered a bug, 
so what exactly could I be doing wrong? Why is the output:

2
-4
-17
8
63
6

I'm probably missing something obvious. If the input is just 
[63], then nothing gets printed out.


More information about the Digitalmars-d-learn mailing list