On Tuesday, 24 May 2022 at 19:09:52 UTC, Steven Schveighoffer
wrote:
This doesn't seem valid for module-level code, assert is an
instruction, not a declaration.
...
Try `std.traits.fullyQualifiedName!fun` to see where it's
coming from.
expected 5 got 0 suggests it is finding some other fun, as
a.fun only takes a single parameter.
Of course this `assert()` is actually inside `static this()` and
there is only one declaration. I just want to show that the used
symbol and call is the same.
Also this is **working** code. I just put the `assert()` there to
ensure the function isn't called by a race condition before it
was loaded (module constructors often have cyclic dependency, so
I cannot put this in a more clean way).
Those asserts() are set in:
module A: module constructor
module B: some function
To also anwser to Adam: no, this symbol is unique. The first line
of the error says:
```
Error: function `a.fun(string param)` is not callable using
argument types `()`.
```
**Note that I have changed the actual module name and signature,
it has orginal 5 arguments and very long names.**
The point is, it shouldn't be called in this line anyway?