On Sat, May 19, 2012 at 12:23 PM, Matthias Walter <xa...@xammy.homelinux.net> wrote:
> I would open a bug report with the following code which is a bit smaller > than my first wrong version: > > ===================== (...) > pragma(msg, typeof(w.aliasStruct).Alias.stringof); // -> "MyStruct" > pragma(msg, AliasStruct.Alias.stringof); // -> "MyStruct" > static assert(is(typeof(w.aliasStruct) == AliasStruct)); // -> true > static assert(is(typeof(w.aliasStruct).Alias == AliasStruct.Alias)); > // -> false > } Seems like a pb concerning whether Alias is a type or a symbol. See A,B,C,D below: void main() { Wrapper w; pragma(msg, typeof(w.aliasStruct).Alias.stringof); // -> "MyStruct" pragma(msg, AliasStruct.Alias.stringof); // -> "MyStruct" static assert(is(typeof(w.aliasStruct) == AliasStruct)); // -> true static assert(is(w.aliasStruct.Alias == AliasStruct.Alias)); // -> true alias typeof(w.aliasStruct) A; // -> OK //alias typeof(w.aliasStruct).Alias B; // -> NOK //alias A.Alias C; // -> NOK alias w.aliasStruct.Alias D; // -> OK static assert(is(A.Alias == AliasStruct.Alias)); // -> true //static assert(is(B == AliasStruct.Alias)); //static assert(is(C == AliasStruct.Alias)); static assert(is(D == AliasStruct.Alias)); // -> true } I think A is enough for your need, but I don't get why B and C are not accepted (DMD 2.059, Linux)