Module without object file?

kdevel kdevel at vogtner.de
Tue Jan 4 22:17:38 UTC 2022


In a project I have this "controller" function:

```
void create_fso (O) (Request req)
{
    :
    auto npathname = (extract name from req)
    :
    O.create (npathname);
    :
}

public import fsobjects;
```

which creates a file system object. The possible object types I 
collected in a separate module ``fsobject.d``:

```
module fsobjects;

import std.file : write;
import std.file : mkdir;

struct File {
    enum title = "file";
    enum void function (string) create = (fn => write (fn, ""));
}

struct Directory {
    enum title = "directory";
    enum void function (string) create = (fn => mkdir (fn));
}
```

Within the router the controller templates are instantiated as

```
    register_action (GET | POST, "/file.create", 
&create_fso!(File));
    register_action (GET | POST, "/directory.create", 
&create_fso!(Directory));
```

This all works fine. But: Unless fsobjects.d is compiled linking 
fails with the error message

```
...  undefined reference to `_D9fsobjects12__ModuleInfoZ'
```

Is there any chance to rephrase fsobjects.d such that it becomes 
a "header only"/"compile only" file of which no object file must 
be presented to the linker?


More information about the Digitalmars-d-learn mailing list