The following code fails under DMD 2.065:

struct Test
{
    bool opBinary(string op: "is", T: typeof(null))(T val)
    {
        return false;
    }

    bool opBinaryRight(string op: "is", T: typeof(null))(T val)
    {
        return false;
    }
}

void main()
{
    auto t = Test();
//Error: incompatible types for ((t) is (null)): 'Test' and 'typeof(null)'
    //assert(t !is null);
    //assert(null !is t);
}

Is this supposed to work, and if not, should an enhancement be made to allow it? This is stopping std.typecons.Proxy from being a true proxy. See the following:

struct Test
{
        int* ptr;
        mixin Proxy!ptr;
        
        this(int* p)
        {
                ptr = p;
        }
}

auto i = new int;
assert(i !is null);
auto t = Test(i);
//Error: incompatible types for ((t) !is (null)): 'Test' and 'typeof(null)'
//assert(t !is null);

Reply via email to