www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 7249] New: 2.058 regression: "no size yet for forward reference" when using this.init.tupleof

reply d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=7249

           Summary: 2.058 regression: "no size yet for forward reference"
                    when using this.init.tupleof
           Product: D
           Version: D2
          Platform: All
        OS/Version: All
            Status: NEW
          Severity: regression
          Priority: P2
         Component: DMD
        AssignedTo: nobody puremagic.com
        ReportedBy: thecybershadow gmail.com



10:09:34 PST ---
struct S
{
    int x;
    alias typeof(this.init.tupleof[0]) T;
}

This worked in 2.057, but doesn't work in DMD git head.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Jan 08 2012
next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=7249




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.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Jan 08 2012
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=7249




15:11:53 PST ---
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.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Jan 08 2012
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=7249




15:15:23 PST ---

 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; -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Jan 08 2012
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=7249





 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. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Jan 08 2012
prev sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=7249


Vladimir Panteleev <thecybershadow gmail.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
         Resolution|                            |INVALID



15:26:02 PST ---
OK, thanks for looking into this.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Jan 08 2012