Alias template parameters and runtime functions
Peter Alexander
peter.alexander.au at gmail.com
Sun Oct 3 08:43:51 PDT 2010
== Quote from bearophile (bearophileHUGS at lycos.com)'s article
> But that code works with dmd 2.049:
> ...
> Bye,
> bearophile
You're right!
That makes things even more curious then. I had noticed the problem in some more complex code
and just assumed it would be the same in the simple code that I presented.
That said, I have managed to create a slightly more complex example that *does* break.
import std.algorithm: map, equal;
import std.range: iota;
import std.stdio;
struct Bar
{
float[1] m;
this(float a) { m = [a]; }
}
class Foo {
Bar[1] m;
this(Bar a) { m = [a]; }
const foo(int i) { return m[i]; }
const allFoo1() {
auto fun = (int i) { return foo(i); };
return map!(fun)(iota(m.length));
}
const allFoo2() {
return map!((int i){ return foo(i); })(iota(m.length));
}
}
void main()
{
Foo f = new Foo(Bar(1));
assert(equal(f.allFoo1(), [Bar(1)]));
assert(equal(f.allFoo2(), [Bar(1)]));
}
More information about the Digitalmars-d
mailing list