Inconsistency with function pointers

Jacob Carlborg doob at me.com
Sat Aug 4 09:02:45 PDT 2012


On 2012-08-04 17:06, Russel Winder wrote:
> I am sure I am just missing something simple, but I need the nudge…
>
> I can do:
>
>          import core.thread ;
>          import std.stdio ;
>
>          int main(immutable string[] args) {
>            auto f() { return delegate () { writeln("Hello World."); }; }
>            auto t = new Thread(f);
>            t.start();
>            t.join();
>            return 0;
>          }
>
> it is Thread(f) rather than Thread(&f) because f is a function returning
> a void delegate() rather than being a void(). However:
>
>          import core.thread ;
>          import std.stdio ;
>
>          int main(immutable string[] args) {
>            auto t = new Thread( delegate () { return delegate () { writeln("Hello World."); }; } ) ;
>            t.start();
>            t.join();
>            return 0;
>          }
>
> trial.d(7): Error: constructor core.thread.Thread.this (void function()
> fn, ulong sz = cast(ulong)0) is not callable using argument types (void
> delegate() delegate() pure nothrow @safe)
> Failed: 'dmd' '-v' '-o-' 'trial.d' '-I.'
>
> So I cannot use an anonymous delegate where I can use a named delegate?

If you take a look at the declaration of the constructor for "Thread" 
you can see that it expects a function pointer. I'm not sure what's 
happening in the first example. I don't think any of the above examples 
should work.

-- 
/Jacob Carlborg


More information about the Digitalmars-d-learn mailing list