Receiving "pthread_mutexattr_init" during compilation when using FileLogger.

Mike Parker aldacron at gmail.com
Mon Jun 7 10:36:23 UTC 2021


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.


More information about the Digitalmars-d-learn mailing list