[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