On Wednesday, 5 September 2018 at 00:35:50 UTC, Manu wrote:
That's all you need really, any symbol you add will cause the
error.
extern(C++, bliz):
created a symbol "bliz", you can't import a package from
"bliz" cause then there's a symbol clash. I thought you
implemented extern(C++) ...
And yes, the example is actually complete. Again, but I'll
simplify the filenames:
ns/bar.d
-------------
module ns.bar;
import ns.baz;
extern(C++, ns):
ns/baz.d
-------------
module ns.baz;
import ns.bar;
extern(C++, ns):
dmd ns/bar.d ns/baz.d
I just found this little hack for such situations. It seems like
a combined effect of mixin template and normal mixin that seems
to work by abusing the creation of temporary module for each
instantiation.
The obvious downside is mixin/CTFE being memory hungry and
compilation times increase.
Also not sure what happens when there is name clashes due to
multiple symbols imported from multiple modules.
Tested with DMD 2.082 -m32mscoff on Windows.
file1.d
```
mixin template a01() {
mixin(`
extern(C++, namespaceone)
public void fun ();
`);
} mixin a01;
mixin template a02() {
mixin(`
extern(C++, namespaceone)
public void otherfun ();
`);
} mixin a02;
// the rest ....
```
file2.d
```
mixin template a03() {
mixin(`
extern(C++, namespaceone)
public void yetanotherfun ();
`);
} mixin a03;
// ...
```