On Wednesday, 17 August 2016 at 12:39:18 UTC, ag0aep6g wrote:
On 08/17/2016 02:08 PM, Eugene Wissner wrote:
I have a problem, that .stringof doesn't return what I'm expecting.
Consider the following:

template A(string T)
{
    enum A : bool
    {
        yes = true,
    }
}

void main()
{
    A!"asdf" a1;
    typeof(a1) a2;
    mixin(typeof(a1).stringof ~ " a3;");
}

I get an error: some.d-mixin-13|13 error| Error: template some.A(string
T) is used as a type

Why the second line in main() works but the third one not?
typeof(a1).stringof seems to ignore the string template parameter T.
pragma(msg, typeof(a1).stringof) would  return just "A".

Is it a bug?

Not exactly a bug. .stringof gives you a simple, readable name. It's not meant to be used in code generation. You can use std.traits.fullyQualifiedName instead:

    import std.traits: fullyQualifiedName;
    mixin(fullyQualifiedName!(typeof(a1)) ~ " a3;");

What I find strange is that if A isn't a enum, but a class the .stringof returns the full type name, therefore I would expect it behave the same in the code above. I will test later fullyQualifiedName, the example above is very simplified version of the code I had problem with. Thanks anyway

Reply via email to