[Issue 3652] New: Allow implicit casting of dynamic array slices of known size to static array

d-bugmail at puremagic.com d-bugmail at puremagic.com
Sat Dec 26 14:17:17 PST 2009


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

           Summary: Allow implicit casting of dynamic array slices of
                    known size to static array
           Product: D
           Version: 2.036
          Platform: Other
        OS/Version: Linux
            Status: NEW
          Severity: enhancement
          Priority: P2
         Component: DMD
        AssignedTo: nobody at puremagic.com
        ReportedBy: baryluk at smp.if.uj.edu.pl


--- Comment #0 from Witold Baryluk <baryluk at smp.if.uj.edu.pl> 2009-12-26 14:17:17 PST ---
Consider this:

void foo(float[4] x) {
   return x[0]+x[1]*x[2]-x[3];
}


void main() {
    float[] xs = read_floats_from_file();

    foreach (i; 0 .. xs.length-4) {
         foo(xs[ i .. i+4]);
    }
}

or simpler thing to calculate in compile time:

void main() {
    float[] xs = read_floats_from_file();
    foo(xs[ 0 .. 4]);
}

In both cases compiler will say:
   cannot implicitly convert expression (_adDupT((&
_D11TypeInfo_Af6__initZ),qs[0u..4u])) of type float[] to float[4u]
or something similar. It is hard to see why this is really needed. 

How about allowing (and performing) implicit cast to static array if compiler
knows (or can easly infere) size of the slice and it aggree with target type?
Of course there will be situations where we have no knowledge about it:


void main() {
    float[] xs = read_floats_from_file();
    uint a = rand() % xs.length;
    foo(xs[ 0 .. a ]);
}

But allowing implicit cast also can detect other errors:
    foreach (i; 0 .. xs.length-4) {
         foo(xs[ i .. i+3]);
    }

Compiler in such situation will complain not because we are using float[] to
float[4] conversion, but because we are trying to call float[4] function using
float[3] slice.

-- 
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