On Thursday, 10 August 2017 at 14:51:22 UTC, Meta wrote:


Welcome to optional parentheses hell. Please enjoy your stay.

Because function calls in D can optionally omit the parens, `FunctionWithArguments.stringof` is actually attempting to call `FunctionWithArguments` without any arguments, and then call `stringof` on the result. In other words, it's actually trying to do this:

writeln(FunctionWithArguments().stringof);

And the D compiler is rightly telling you that you can't call the function with no arguments. The easiest solution is to use __traits(identifier) instead:

writeln(__traits(identifier, FunctionWithArguments));

You can make a handy template helper to do this for you:

enum stringOf(alias symbol) = __traits(identifier, symbol);
writeln(stringOf!FunctionWithArguments);

Wow. That makes perfect sense. I forgot stringof works only with expressions and that a function name is a valid expression in the case of UCF.

I already found the __traits as a workaround, but the template helper is a great idea. Thanks!

Reply via email to