[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