Passing delegate indirectly to createLowLevelThread doesn't work

Tejas notrealemail at gmail.com
Mon Jul 26 17:14:45 UTC 2021


On Monday, 26 July 2021 at 17:01:13 UTC, JG wrote:
> On Monday, 26 July 2021 at 16:46:40 UTC, Tejas wrote:
>> On Monday, 26 July 2021 at 15:42:44 UTC, Paul Backus wrote:
>>> On Monday, 26 July 2021 at 15:29:26 UTC, Tejas wrote:
>>>> [...]
>>>
>>> The delegate must be `nothrow`:
>>>
>>> ```d
>>> void delegate() nothrow f;
>>> ```
>>
>> Doesn't seem to matter. I tried that beforehand. And even if 
>> it did why does passing it directly work without explicitly 
>> qualifying it as nothrow then?
>
> It does work for me. To me running the following explains why:
>
> ```d
> import std;
> import core.thread.osthread;
>
> void delegate() f;
> void main()
> {
>     void func(){}
>     f = &func;
>     pragma(msg,typeof(&func));
>     pragma(msg,typeof(f));
>     createLowLevelThread(&func, 2<<30);//works
>     //createLowLevelThread(f, 2<<30);// doesn't  work!!
> }
> ```

Yeah after reading the error diagnostics carefully I realized 
that the compiler is inferring many attributes when passing 
```func``` directly but not when passing via delegate


More information about the Digitalmars-d-learn mailing list