Bug 7249 – 2.058 regression: "no size yet for forward reference" when using this.init.tupleof

Status
RESOLVED
Resolution
INVALID
Severity
regression
Priority
P2
Component
dmd
Product
D
Version
D2
Platform
All
OS
All
Creation time
2012-01-08T10:09:00Z
Last change time
2012-01-08T15:26:02Z
Assigned to
nobody
Creator
dlang-bugzilla

Comments

Comment #0 by dlang-bugzilla — 2012-01-08T10:09:34Z
struct S { int x; alias typeof(this.init.tupleof[0]) T; } This worked in 2.057, but doesn't work in DMD git head.
Comment #1 by k.hara.pg — 2012-01-08T15:05:22Z
This causes by fixing bug 7190. I think this is similar problem like follows: struct S { int x; alias typeof(this.init.sizeof) T; // Error: struct test.S no size yet for forward reference } tupleof property requires complete semantic analysis to get the fields of a type. So it is meaningful forward reference, IMHO.
Comment #2 by dlang-bugzilla — 2012-01-08T15:11:53Z
In my case, the list of fields is passed as a template parameter: struct S(string FIELDS) { mixin(FIELDS); alias typeof(Fields.init.tupleof[0]) TypeOfFirstField; } There is a simple workaround available: struct Fields { mixin(FIELDS); } alias typeof(Fields.init.tupleof[0]) TypeOfFirstField; So, if you think this is not a bug, I'm not against this change.
Comment #3 by dlang-bugzilla — 2012-01-08T15:15:23Z
(In reply to comment #2) > In my case, the list of fields is passed as a template parameter: > > struct S(string FIELDS) > { > mixin(FIELDS); > > alias typeof(Fields.init.tupleof[0]) TypeOfFirstField; Oops, last line should be: alias typeof(this.init.tupleof[0]) TypeOfFirstField;
Comment #4 by k.hara.pg — 2012-01-08T15:25:00Z
(In reply to comment #2) > So, if you think this is not a bug, I'm not against this change. Yes, I think this is not a bug. Additionally, old behavior had a order dependent problem. struct S { alias typeof(this.init.tupleof[0]) T; // Error: array index [0] is outside array bounds [0 .. 0] // -> tupleof result was empty int x; alias typeof(this.init.tupleof[0]) T; // OK, T == int } Now they raise forward reference error as a same. I think it's better consistency.
Comment #5 by dlang-bugzilla — 2012-01-08T15:26:02Z
OK, thanks for looking into this.