Is there an alternative to "__FUNCTION__" that gives the actual function symbol and not the name as a string?

Simon simon.vanbernem at yahoo.de
Sat Oct 23 18:23:47 UTC 2021


For debugging purposes, I have built a mixin that will, when 
declared inside a function, output code to the console that will 
reproduce the exact function call.

So, as an example, for the following function

int reproducible_function(int a, int b){
   mixin(OUTPUT_REPRO_CASE!reproducible_function);
   return a + b;
}

called in the following way:

reproducible_function(5, 9);

the mixin OUTPUT_REPRO_CASE will output the exact same call. I 
can then take that code, paste it into the tests and tadaaaa - I 
have a repro case.

The only problem I have with this is that you still need to give 
the function as a template argument to OUTPUT_REPRO_CASE. In 
other cases, I have gotten around this by giving __FUNCTION__ as 
the default argument to that template parameter, but that doesn't 
work here because the mixin expands to something that calls 
ParameterIdentifierTuple. ParameterIdentifierTuple does not take 
a string as an argument, but needs the actual symbol (or an 
alias) to be passed.

So what I am looking for then is the equivalent to __FUNCTION__ 
that evaluates to the actual symbol of the function instead of 
its name, so it can be used as a parameter to 
ParameterIdentifierTuple. With this, I could then change the call 
to just be:

int reproducible_function(int a, int b){
    mixin(OUTPUT_REPRO_CASE!());
    return a + b;
}




More information about the Digitalmars-d-learn mailing list