www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 6932] New: Weird forward reference error

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

           Summary: Weird forward reference error
           Product: D
           Version: D1 & D2
          Platform: All
        OS/Version: All
            Status: NEW
          Keywords: rejects-valid
          Severity: normal
          Priority: P2
         Component: DMD
        AssignedTo: nobody puremagic.com
        ReportedBy: mrmocool gmx.de



package mixin template CLWrapper(T, alias g)
{
    package alias T CTypedontremovethis; 
} 

package struct CLObjectCollection(T)
{
    this(T.CTypedontremovethis)
    {
    }
}

alias CLObjectCollection!CLDevice CLDevices;

cl_errcode dontremovethis(
) {}


struct CLDevice
{
    mixin CLWrapper!(int, dontremovethis);
}

device.d(21): Error: mixin device.CLDevice.CLWrapper!(int,dontremovethis)
forward reference of dontremovethis
device.d(13): Error: template instance device.CLObjectCollection!(CLDevice)
error instantiating

E.g. removing the CLObjectCollection stuff "solves" it even though it isn't
related at all.

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


hsteoh quickfur.ath.cx changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
                 CC|                            |hsteoh quickfur.ath.cx
         Resolution|                            |WORKSFORME



Tested on dmd git HEAD (6a90c4df): I couldn't compile the code snippet due to
unrelated errors, so I inserted dummy definitions of cl_errcode and added a
return statement to dontremovethis(). Here is the code I tested:

----
enum cl_errcode {A}

package mixin template CLWrapper(T, alias g)
{
    package alias T CTypedontremovethis;
}

package struct CLObjectCollection(T)
{
    this(T.CTypedontremovethis)
    {
    }
}

alias CLObjectCollection!CLDevice CLDevices;

cl_errcode dontremovethis(
) { return cl_errcode.A; }


struct CLDevice
{
    mixin CLWrapper!(int, dontremovethis);
}
----

DMD git HEAD seems to be capable of compiling this correctly now, so I'm
resolving this bug. Please reopen and post failing code if it still doesn't
work for you. Thanks!

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Sep 12 2013