[Issue 6300] New: Returning a cast(immutable) struct erroneously calls a matching constructor

d-bugmail at puremagic.com d-bugmail at puremagic.com
Tue Jul 12 12:46:02 PDT 2011


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

           Summary: Returning a cast(immutable) struct erroneously calls a
                    matching constructor
           Product: D
           Version: unspecified
          Platform: Other
        OS/Version: Windows
            Status: NEW
          Severity: normal
          Priority: P2
         Component: DMD
        AssignedTo: nobody at puremagic.com
        ReportedBy: ludwig at informatik.uni-luebeck.de


--- Comment #0 from Sönke Ludwig <ludwig at informatik.uni-luebeck.de> 2011-07-12 12:40:53 PDT ---
The following snipped fails to compile. What seems to happen is that the return
statement implicitly calls the constructor which in turn returns a mutable S
which is not implicitly castable to immutable - thus the error.

Happens since DMD 2.054

---
struct S {
    int[] c;
    this(in S){}
    immutable(S) f() const {
        S s;
        return cast(immutable)s;
        // the following works:
        //immutable(S) sr = cast(immutable)s;
        //return sr;
    }
}
---

dbug2.d(6): Error: cannot implicitly convert expression ((immutable
immutable(S) __ctmp3 = 0;
 , __ctmp3).this(s)) of type S to immutable(S)


.. leaving the severity as normal, as there is an easy workaround

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


More information about the Digitalmars-d-bugs mailing list