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

Reply via email to