www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 7047] New: alias error in struct only for dmd1

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

           Summary: alias error in struct only for dmd1
           Product: D
           Version: D1
          Platform: x86
        OS/Version: Windows
            Status: NEW
          Severity: regression
          Priority: P2
         Component: DMD
        AssignedTo: nobody puremagic.com
        ReportedBy: changlon gmail.com



dmd 1.071 error .

struct Test1 {
    alias typeof(this) This;
    alias This* pThis;
    int number ;
    void Init(){
        static void Callback (void* user_data){
            pThis _this = cast(pThis) user_data;
            auto i = _this.number ;
        }
    }
}

------------
test.d(10): Error: no property 'number' for type 'Test1*'

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Dec 01 2011
parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=7047


Don <clugdbug yahoo.com.au> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
                 CC|                            |clugdbug yahoo.com.au
         Resolution|                            |INVALID
           Severity|regression                  |normal



This isn't a regression. It gave exactly the same error back in DMD 1.000.

In fact, it's not even a bug: in D1, 'this' for a struct is a pointer to that
struct. As you can see with this code: 

struct Test1 {
    static assert(is(typeof(this) == Test1)); // FAILS !!!
}

In D2, the 'this' pointer is the struct itself.

If you make this change:

-    alias This* pThis;
+    alias This pThis;

your code will compile.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Dec 09 2011