| |
| Posted by Shachar Shemesh | PermalinkReply |
|
Shachar Shemesh
| module foo;
import std.traits;
void bar(T)() {
}
pragma(msg, "id: ", fullyQualifiedName!(bar));
pragma(msg, "parent: ", fullyQualifiedName!(__traits(parent, bar)));
pragma(msg, "id: ", fullyQualifiedName!(bar!int));
pragma(msg, "parent: ", fullyQualifiedName!(__traits(parent, bar!int)));
pragma(msg, "grandparent: ", fullyQualifiedName!(__traits(parent, __traits(parent, bar!int))));
Compile, and the result is:
id: foo.bar
parent: foo
id: foo.bar!(int)
parent: foo.bar!(int)
grandparent: foo.bar!(int)
Once the object you have is an inside template, you cannot get its parent. I suspect the reason is that bar is actually defined as:
template bar(T) {
void bar() {
}
}
So asking for the function's parent supposedly returns the template. This doesn't live up to scrutiny, though, because the template's parent is the module, but asking for the parent of the parent still returns the function.
|