August 18, 2013
http://d.puremagic.com/issues/show_bug.cgi?id=10843

           Summary: Combinatorial problem of struct & alias this & null
           Product: D
           Version: D2
          Platform: All
        OS/Version: All
            Status: NEW
          Severity: normal
          Priority: P2
         Component: DMD
        AssignedTo: nobody@puremagic.com
        ReportedBy: zan77137@nifty.com


--- Comment #0 from SHOO <zan77137@nifty.com> 2013-08-17 22:03:19 PDT ---
These tree samples don't work:
------------------
unittest
{
    static struct HANDLE
    {
        void* h;
        alias h this;
    }

    //HANDLE a = null;             // NG
    HANDLE a;
    a = null;                      // OK
}

unittest
{
    static struct HANDLE
    {
        void* h;
        alias h this;
        this(void* h) { this.h = h; }
    }
    HANDLE a = null;               // OK
    static void foo(HANDLE h){}
    //foo(null);                   // NG
}

unittest
{
    static struct HANDLE
    {
        void* h;
        alias h this;
        this(void* h) { this.h = h; }
    }
    static struct WSAEVENT
    {
        HANDLE h;
        alias h this;
        this(HANDLE h) { this.h = h; }
    }
    auto a = cast(HANDLE)null;     // OK
    //auto b = cast(WSAEVENT)null; // NG
}

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
August 18, 2013
http://d.puremagic.com/issues/show_bug.cgi?id=10843


Maxim Fomin <maxim@maxim-fomin.ru> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
                 CC|                            |maxim@maxim-fomin.ru
         Resolution|                            |INVALID


--- Comment #1 from Maxim Fomin <maxim@maxim-fomin.ru> 2013-08-17 23:53:49 PDT ---
This is invalid report in all there cases.

1) is implicit construction for which constructor with respective arguments
should be defined (as provided in second example).

2) is implicit construction on argument passing for which variardic functions do exists. Spec is explicit that for such cases ctor is required.

3) same as #2 with difference that now function is a ctor

This is compilable:
unittest
{
    static struct HANDLE
    {
        void* h;
        alias h this;
    }

    //HANDLE a = null;             // NG
    HANDLE a;
    a = null;                      // OK
}

unittest
{
    static struct HANDLE
    {
        void* h;
        alias h this;
        this(void* h) { this.h = h; }
    }
    HANDLE a = null;               // OK
    static void foo(HANDLE h ...){}
    foo(null);                   // OK
}

unittest
{
    static struct HANDLE
    {
        void* h;
        alias h this;
        this(void* h) { this.h = h; }
    }
    static struct WSAEVENT
    {
        HANDLE h;
        alias h this;
        this(HANDLE h ...) { this.h = h; }
    }
    auto a = cast(HANDLE)null;     // OK
    auto b = cast(WSAEVENT)null; // OK
}

void main() {}

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