Hello,

I’ve got this piece of code:

---
import std.stdio;

void test(alias fn1, alias fn2)()
{
    fn1();
    fn2();
}

struct Foo
{
    void foo()
    {
        test!(bar, baz);
    }

    void bar()
    {}

    void baz()
    {}
}
---

If I try to compile it, dmd complains, which I guess makes sense:

---
Error: need this for bar of type void()
Error: need this for baz of type void()
---

However, if I change line 13 from `test!(bar, baz);` to `test!(() => bar, baz);`, it compiles and executes fine, calling both the `bar` and `baz` member functions.

Why is this? Shouldn’t it complain about `baz` needing `this`? Does the lambda in the first template argument somehow “pull in” the `this` reference for `baz`, too?

Thanks!

Reply via email to