weird behavior returning delegate
Carlos Santander
csantander619 at gmail.com
Sat Jul 1 05:33:00 PDT 2006
This code, with DMD 0.162 on Windows:
//-----------------------
T delegate (T) acc (T) (T n)
{
return (T i) { return n += i; };
}
void foo ()
{
auto acc1 = acc (4);
assert (5 == acc1 (1), "5 != 5");
assert (7 == acc1 (2), "7 != 7");
auto acc2 = acc (10);
assert (11 == acc2 (1), "11 != 11");
assert (12 == acc2 (1), "12 != 12");
assert (10 == acc1 (3), "10 != 10"); // 16
assert (20 == acc2 (8), "20 != 20");
}
import std.stdio;
void bar ()
{
auto acc1 = acc (4);
writefln (" 5 == %s", acc1 (1));
writefln (" 7 == %s", acc1 (2));
auto acc2 = acc (10);
writefln ("11 == %s", acc2 (1));
writefln ("12 == %s", acc2 (1));
writefln ("10 == %s", acc1 (3));
writefln ("20 == %s", acc2 (8));
writefln ();
}
void main()
{
bar ();
foo ();
}
//-----------------------
Produces this:
5 == 5
7 == 10
11 == 11
12 == 9
10 == 13
20 == 17
Error: AssertError Failure test.d(16) 10 != 10
I think the assert failing is somewhat expected (stack frame no longer
available), but how can the previous asserts work when the values shown with
writefln are not the ones expected, or supposedly asserting correctly?
--
Carlos Santander Bernal
More information about the Digitalmars-d
mailing list