Receiving "pthread_mutexattr_init" during compilation when using FileLogger.

tastyminerals tastyminerals at gmail.com
Mon Jun 7 11:29:44 UTC 2021


On Monday, 7 June 2021 at 10:36:23 UTC, Mike Parker wrote:
> On Monday, 7 June 2021 at 09:29:08 UTC, tastyminerals wrote:
>> I getting
>> ```
>> import/core/sync/mutex.d(87,36): Error: 
>> `pthread_mutexattr_init` cannot be interpreted at compile 
>> time, because it has no available source code
>> ```
>> compile time error. One of those D exceptions which doesn't 
>> say where it happened in your code so you need to comment out 
>> the lines that might cause it one by one :D
>>
>> I found that this was caused by the "FileLogger" which I 
>> create at the top of the file. But why?
>
> You can't initialize classes at module scope. You can declare 
> them, but then they must be initialized in a function or a 
> module constructor. Normally for a type `MyClass` in module 
> `foo`, you'd see an error like this:
>
> ```D
> Error: variable `foo.MyClass` is a thread-local class and 
> cannot have a static initializer. Use `static this()` to 
> initialize instead.
> ```
>
> I guess CTFE runs before the check that catches this, though, 
> and the `FileLogger` constructor ultimately triggers the error 
> your seeing.
I see, I only remember that one cannot create associative arrays 
in global scope. This is explicitly written in the language 
reference.
It's interesting how there is no information about class 
instantiation at module level anywhere in the docs. Even the 
Ali's book does not explicitly say that you cannot instantiate a 
class this way. Maybe I missed it but just doing the key search 
on "scope", "global", "module" in class related chapters didn't 
give me any results.


More information about the Digitalmars-d-learn mailing list