On 5/24/22 6:10 PM, frame wrote:
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.
"of course" I have no idea what your real code looks like, unless you
post the real code.
While I get the point of trying to slim down the example to something
postable, a very common problem with this kind of self-trimming is that
you end up trimming out the problematic code. Why? Because if you
noticed the problematic code, you wouldn't be posting here, you would
just fix it. This, in fact, happens to me frequently.
Now, it's also possible that there is an actual compiler bug here, it
certainly seems like it could be, but a full (non-)working example would
be useful.
I still highly recommend trying code like:
```d
import std.traits;
pragma(msg, fullyQualifiedName!fun);
```
inside the place where your assert is failing. To me, if it's using the
expected symbol for `fun` (or whatever it's called), then it should
print the definition you expect from the module you expect. If not,
maybe there is a name conflict, and it's picking the wrong one? These
problems can be tricky to find.
-Steve