[Issue 12773] Compiler implicitly converts delegate into function when taking an address of a method

via Digitalmars-d-bugs digitalmars-d-bugs at puremagic.com
Sun Nov 30 11:38:10 PST 2014


https://issues.dlang.org/show_bug.cgi?id=12773

nick <nicolas.jinchereau at gmail.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |nicolas.jinchereau at gmail.co
                   |                            |m

--- Comment #2 from nick <nicolas.jinchereau at gmail.com> ---
I believe this behaviour is by design. There is no implicit conversion, because
&C.bar is not a delegate, it is a function pointer. The following code works as
expected:


alias Func = void function();
alias Del = void delegate();

class C
{
    string str = "bar";
    static void foo() { }
    void bar() { writeln(str); }
}

void main()
{
    {
        // Func func = C.foo;  // disallowed, since this is a function call
    }

    {
        Func func = &C.foo;  // ok, the proper syntax usage.
        func();  // ok
    }

    {
        Func func = &C.bar;  // correct

        C c = new C;
        Del del = &c.bar;    // correct

        Del del2;
        del2.funcptr = func;
        del2.ptr = cast(void*)c;
        del2();               // works, output is "bar"
    }
}

--


More information about the Digitalmars-d-bugs mailing list