https://d.puremagic.com/issues/show_bug.cgi?id=12287
--- Comment #10 from Kenji Hara <k.hara...@gmail.com> 2014-03-02 19:00:17 PST --- (In reply to comment #9) > (In reply to comment #8) > > Because your compiler change will make some part of the internal structure > > of > > the template instantiation invisible. > > I don't understand. Why? > > Before my patch: __traits(parent, X!foo) is the same symbol as X!foo. It did > not reveal any internal structure at all, the result was completely useless. Internally X!foo is exactly same as X!foo.X. So __traits(parent, X!foo) will return the parent of the instantiated type X - that is the TemplateInstance 'X!foo'. They are completely different objects. But, latter semantic analysis will translate X!foo to X!foo.X again. The behavior is not directly related to the __traits(parent) behavior. > After my patch, it produces the result that a casual user may expect from an > eponymous template, especially when declared like struct S(Args) {...} I think it's not consistent behavior in generic case. For example: template S(T) { struct S {} int x; static assert(__traits(isSame, __traits(parent, S), __traits(parent, x))); } alias s = S!int; Your change will break this case. -- Configure issuemail: https://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------