On Saturday, 20 July 2019 at 03:31:41 UTC, Newbie2019 wrote:

template Test(alias T){
        pragma(msg, T.stringof);

Believe it or not, but this can result in the function being called. This is D's optional parenthesis feature, to do simple property syntax.

Not a bug.

I want get the function name "t2", "t3" for string mixin, how do I do this in D ?

You should never actually need that! What is your use case?

In most cases I see people doing .stringof, the correct solution is to simply... not. Use the local name directly.

If you do need the name - and the only cases for this ought to be declaring a new item for public consumption or for interfacing with users - the correct way to get an identifier is `__traits(identifier, T)`... but again, more often than not, you do NOT need this and it is wrong to try!

.stringof should almost never be used except for debugging, and string concatenation in string mixings is actually only necessary for new declaration names.

OK:

mixin("int " ~ name ~ " = T;");

Wrong:

mixin("int " ~ name ~ " = " ~ T.stringof ~ ";");

Reply via email to