On 5/24/22 10:06 PM, frame wrote:
Sorry, this was not affront, it was meant as my POV that you may have
problems to get my problem because I have (as usually) forgot to make
this more visible that some code was truncated.
OK, sorry to read into that ;)
I tried your suggestion, as replied to Adam - the symbol is unique and
it shows that correct location. It's not different from the error message.
Just to be pedantic, you tried that call in the *exact place* the assert
is failing to compile? D can be weird/surprising about name lookups.
However, this error has nothing to do with `assert()`. In fact the
compiler allows nothing than invocation or this error will be triggered.
Even that fails:
The compiler is treating `fun` not as a function pointer, but as a
function. However, the type looks correct to me. I tried a simple
example on run.dlang.io, even with multiple modules, and seems to work
as expected.
```d
// same error:
auto test = cast(void*)fun;
```
try:
pragma(msg, typeof(fun));
If I do:
```d
extern(C) void foo(string) {}
pragma(msg, typeof(foo));
pragma(msg, typeof(&foo));
```
I get:
extern (C) void(string param)
extern (C) void function(string param)
The first is a function (yes, they have a type), and the latter is a
function pointer.
So that might give a clue whether the compiler thinks `fun` is a
function or a function pointer. D should *never* call a function pointer
without parentheses.
If you get the latter, yet your assert fails, then that is most
certainly a compiler bug. Again, important that you do this in the exact
place the assert fails to ensure the same name lookup situation.
-Steve