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