On Tuesday, 9 July 2013 at 10:50:02 UTC, John Colvin wrote:
JS asked about this in the main group, but here is more appropriate and I'm quite interested myself.

Can someone explain the rationale behind this:

class A
{
    auto a = (){};              //Lambda not allowed
    auto b = function(){};      //Function allowed
    auto c = delegate(){};      //Delegate not allowed
}

A guess:

Delegate's aren't allowed as members due their context pointer (why???), lambdas are assumed to be delegates unless they are proved to not need context (and dmd is sucking at proving that).

Error message is actually misleading here, because this compiles:

class A
{
    void delegate() a;
}

void main()
{
        auto a = new A();
        a.a = () {};
}

So this has something to do with _initialization_ of class members with delegates/lambdas, not their very existence.

Reply via email to