delegates/lambas do not pick up calling convention
Johnson Jones via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Wed Aug 9 16:52:00 PDT 2017
given somethign like Threads.threadsAddIdle
which takes an extern(C) int (void*)
we can't seem to do
threadsAddIdle((void*) { }, null);
nor
because D complains is not the correct type nor can we do
delegate(void*)
or
extern(C) delegate(void*) {}
and have to resort to verbosity to get it to work. Is there a way
around that? Why can't D realize that an inline lambda should use
the same calling convention? There is no harm in doing so.
Maybe I'm doing it wrong:
I've tried
import gdk.Threads;
alias DD = static extern(C) int delegate(void*);
auto x = (void*)
{
return 1;
};
gdk.Threads.threadsAddIdle(x, null);
which gives the error
(extern (C) int function(void* userData) funct, void* data) is
not callable using argument types
int function(void* _param_0) pure nothrow @nogc
@safe, typeof(null))
While one can do something like
gdk.Threads.threadsAddIdle(cast(GSourceFunc)(void* data)
{
return 1;
}, null);
which seems to work but the cast seems superfluous as D should be
able to implicitly figure that out since it's an inline delegate.
More information about the Digitalmars-d-learn
mailing list