http://d.puremagic.com/issues/show_bug.cgi?id=2811

           Summary: mixin fields not visible inside mixin method
           Product: D
           Version: 2.027
          Platform: PC
        OS/Version: Windows
            Status: NEW
          Severity: normal
          Priority: P2
         Component: DMD
        AssignedTo: bugzi...@digitalmars.com
        ReportedBy: 2kor...@gmail.com


Let's start with code I'd like to write:

struct Own(T)
{
    void opAssign(ref Own other)
    {
                _ptr = other._ptr;
                other._ptr = null;
    }

    private T _ptr = null;
}

I'm trying to use it like this:

alias Own!(Resource) ResourcePtr;

but it causes template forward referencing all the time.

So my next step is to workaround this issue:

class Resource {}

struct OwnT(T, Own)
{
    void opAssign(ref Own other)
    {
        _ptr = other._ptr;
        other._ptr = null;
    }

    protected T _ptr = null;
}

struct ResourcePtr
{
    mixin OwnT!(Resource, ResourcePtr);
}

But I'm getting the following errors:

test.d(7): Error: no property '_ptr' for type 'ResourcePtr'
test.d(7): Error: cannot implicitly convert expression (1) of type int to
test.Resource
test.d(7): Error: cannot cast int to test.Resource
test.d(8): Error: no property '_ptr' for type 'ResourcePtr'
test.d(8): Error: constant other._ptr is not an lvalue
test.d(8): Error: cannot implicitly convert expression (null) of type void* to
int


-- 

Reply via email to