[Issue 1541] std.bind is broken?
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Thu Dec 18 11:22:24 PST 2008
http://d.puremagic.com/issues/show_bug.cgi?id=1541
rayerd.wiz at gmail.com changed:
What |Removed |Added
----------------------------------------------------------------------------
Attachment #188 is|0 |1
obsolete| |
Attachment #195 is|0 |1
obsolete| |
------- Comment #5 from rayerd.wiz at gmail.com 2008-12-18 13:22 -------
Created an attachment (id=283)
--> (http://d.puremagic.com/issues/attachment.cgi?id=283&action=view)
Fixed std.bind for dmd2.022 within limitations
import std.stdio, std.bind;
void main()
{
writefln("(bind(&less, _0, 5))");
bool less(int a, int b){return a<b;}
auto less5 = bind(&less, _0, 5);
for (int i=0; i<7; ++i)
{
writefln(i, "<5 ", less5(i));
}
writefln("(bind(&less, 5, _0))");
auto not_less5 = bind(&less, 5, _0);
for (int i=0; i<7; ++i)
{
writefln(i, ">=6 ", not_less5(i));
}
writefln("(bind(&less, 3, 5))");
auto less_3_5 = bind(&less, 3, 5);
writefln("3<5 ", less_3_5());
writefln("(bind(&less, 5, 3))");
auto less_5_3 = bind(&less, 5, 3);
writefln("5<3 ", less_5_3());
writefln("(bind(bind(&less, _1, _0).ptr, _0, 3)");
auto greater = bind(&less, _1, _0);
auto greater3 = bind(greater.ptr, _0, 3);
for (int i=0; i<7; ++i)
{
writefln(i, ">3 ", greater3(i));
}
writefln("(bindAlias!(less)(_0, 2))");
auto less2 = bindAlias!(less)(_0, 2);
for (int i=0; i<7; ++i)
{
writefln(i, "<2 ", less2(i));
}
writefln("(bind(&foo, bind(&bar, _0)))");
int foo(int i) {return i*2;}
int bar(int i) {return i*3;}
auto fooBar = bind(&foo, bind(&bar, _0));
writefln(fooBar(5));
//
// Limitations
//
// writefln("(bindAlias!(greater)(_0, 4))");
// auto greater4 = bindAlias!(greater)(_0, 4);
// for (int i=0; i<7; ++i)
// {
// writefln(i, ">4 ", greater4(i));
// }
// auto fooFooBar = bindAlias!(foo)(bindAlias!(fooBar)(_0));
// auto fooFooBar = bindAlias!(foo)(bind(fooBar.ptr, _0));
// writefln(fooFooBar(5));
}
I:\bind_repair>main
(bind(&less, _0, 5))
0<5 true
1<5 true
2<5 true
3<5 true
4<5 true
5<5 false
6<5 false
(bind(&less, 5, _0))
0>=6 false
1>=6 false
2>=6 false
3>=6 false
4>=6 false
5>=6 false
6>=6 true
(bind(&less, 3, 5))
3<5 true
(bind(&less, 5, 3))
5<3 false
(bind(bind(&less, _1, _0).ptr, _0, 3)
0>3 false
1>3 false
2>3 false
3>3 false
4>3 true
5>3 true
6>3 true
(bindAlias!(less)(_0, 2))
0<2 true
1<2 true
2<2 false
3<2 false
4<2 false
5<2 false
6<2 false
(bind(&foo, bind(&bar, _0)))
30
--
More information about the Digitalmars-d-bugs
mailing list