On 05/18/12 23:06, Matthias Walter wrote: > ============= > > struct MyStruct { } > > struct Wrapper(Wrap) > { > Wrap _wrap; > > this(Wrap wrap) > { > _wrap = wrap; > } > } > > > struct AliasStruct > { > public: > alias MyStruct Alias; > } > > > int main(char[][] args) > { > auto w = Wrapper!(AliasStruct)(AliasStruct.init); > pragma(msg, is(Wrapper!(AliasStruct).Wrap == AliasStruct) ? "true" : > "false"); > pragma(msg, is(typeof(w._wrap) == AliasStruct) ? "true" : "false"); > pragma(msg, is(typeof(w._wrap).Alias == AliasStruct.Alias) ? "true" : > "false"); > > > return 0; > } > ============= > > prints out > > false > true > false > > during compilation using current git version of dmd. In my application I > used the third case, i.e., wanted to find out whether they alias the > same thing.
Hmm, my old GDC considers them equal (ie last line is "true"), so it's a recent change. What does pragma(msg, is(w._wrap.Alias == AliasStruct.Alias)); pragma(msg, typeof(w._wrap).Alias.stringof); pragma(msg, AliasStruct.Alias.stringof); print? Looks like a bug. artur