www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 11743] New: cannot initialize const arrays with out parameters

reply d-bugmail puremagic.com writes:
https://d.puremagic.com/issues/show_bug.cgi?id=11743

           Summary: cannot initialize const arrays with out parameters
           Product: D
           Version: D2
          Platform: All
        OS/Version: All
            Status: NEW
          Severity: normal
          Priority: P2
         Component: DMD
        AssignedTo: nobody puremagic.com
        ReportedBy: bugzilla digitalmars.com


--- Comment #0 from Walter Bright <bugzilla digitalmars.com> 2013-12-14
11:08:45 PST ---
The following shows the problem:
---------------------
struct S {
    const int[] x;
    const int[] y;
    const int   z;

    this(int i) {
        x = null;       // works
        foo(y);         // fails
        bar(z);         // works
    }
}

void foo(out int[] y) { y = null; }

void bar(out int z) { z = 1; }
---------------------

dmd -c foo
foo.d(9): Error: function foo.foo (out int[] y) is not callable using argument
types (const(int[]))

-- 
Configure issuemail: https://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Dec 14 2013
parent d-bugmail puremagic.com writes:
https://d.puremagic.com/issues/show_bug.cgi?id=11743



--- Comment #1 from Kenji Hara <k.hara.pg gmail.com> 2013-12-14 22:00:57 PST ---
(In reply to comment #0)
 The following shows the problem:
 ---------------------
 struct S {
     const int[] x;
     const int[] y;
     const int   z;
 
     this(int i) {
         x = null;       // works
         foo(y);         // fails
         bar(z);         // works
     }
 }
 
 void foo(out int[] y) { y = null; }
 
 void bar(out int z) { z = 1; }
 ---------------------
I think bar(z); should also be rejected, because it would violate const system. struct S { immutable int z; this(int i) { bar(z); // works } } int* g; void bar(out int z) { z = 1; g = &z; } void main() { S s = S(1); assert(s.z == 1 && is(typeof(s.z) == immutable int)); *g = 100; assert(s.z == 1); // fails! } -- Configure issuemail: https://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Dec 14 2013