On Monday, 16 June 2014 at 15:25:51 UTC, Ali Çehreli wrote:
Here is a minimal example that reproduces the issue and the
hint that compiles the code:
class SocketListener
{
public void delegate( shared(SocketListener) sender )
/* shared */ // <-- UNCOMMENT TO COMPILE
eventWhenStarted;
}
class C
{
this()
{
auto listener = new shared SocketListener();
listener.eventWhenStarted = &listener_whenStarted;
}
public void listener_whenStarted( shared(SocketListener)
sender ) shared
{}
}
void main()
{}
Error: cannot implicitly convert expression
(&this.listener_whenStarted) of type void
delegate(shared(SocketListener) sender) shared to shared(void
delegate(shared(SocketListener)))
Ali
Okay, now I continue with another thing. After defining the event
attribute as follows
public void delegate( shared(SocketListener) sender ) shared
eventWhenStarted;
---
I removed the "shared" keyword from that method
public void listener_whenStarted( shared(SocketListener) sender
){}
---
Then set the attribute as follows
listener.eventWhenStarted = cast(shared)(&listener_whenStarted);
---
There is error again.
main.d(21): Error: cannot implicitly convert expression
(&this.listener_whenStarted) of type shared(void
delegate(shared(SocketListener))) to shared(void
delegate(shared(SocketListener)))
---
This error is important, because both types are completely same:
main.d(21): Error: cannot implicitly convert expression
(&this.listener_whenStarted) of type
shared(void delegate(shared(SocketListener)))
to
shared(void delegate(shared(SocketListener)))
---
Can this be a bug?