November 11, 2011
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


--- Comment #0 from Trass3r <mrmocool@gmx.de> 2011-11-11 11:26:14 PST ---
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: -------
September 12, 2013
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


--- Comment #1 from hsteoh@quickfur.ath.cx 2013-09-12 07:40:16 PDT ---
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: -------