Identifier hierarchy

Basile B. b2.b2.b2.temp.temp at gmx.com
Mon Jun 11 13:39:22 UTC 2018


On Monday, 11 June 2018 at 13:19:17 UTC, Simen Kjærås wrote:
> On Monday, 11 June 2018 at 12:59:01 UTC, Mike Franklin wrote:
>> On Monday, 11 June 2018 at 12:38:33 UTC, Luís Marques wrote:
>>> Just to check. If you have a piece of code like 
>>> "foo.bar.baz", you can get the full hierarchy, for instance 
>>> with stringof:
>>>
>>>
>>>      static assert(foo.bar.baz.stringof == "foo.bar.bar");
>>>
>>
>> Are you looking for this: 
>> https://dlang.org/phobos/std_traits.html#fullyQualifiedName ?
>
> That only works for modules and types - Luís mentioned that 
> __traits(identifier) only returns the type, not the identifier. 
> Consider:
>
> module foo;
> import std.traits;
>
> struct S { int n; }
>
> unittest {
>     S s;
>     // Prints "s.n"
>     pragma(msg, s.n.stringof);
>     // Prints "foo.S.n".
>     pragma(msg, fullyQualifiedName!(s.n));
> }
>
> As for getting the name s.n inside a template, I don't think 
> that's currently possible.
>
> --
>   Simen

the FQN is working here but i find the first message a bit 
confuse. Not sure if this small runnable represents the issue ?


---
module runnable;

import std.stdio, std.traits;

struct foo {  struct bar { static int baz;} }

template Test(alias arg)
{
     pragma(msg, fullyQualifiedName!arg);
}

void main()
{
     alias t = Test!(foo.bar.baz); // runnable.foo.bar.baz
}
---


More information about the Digitalmars-d mailing list