[Issue 24323] New: x[0 .. 2] cast to Ty[2], x[$-2 .. $] does not?
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Mon Jan 8 03:41:54 UTC 2024
https://issues.dlang.org/show_bug.cgi?id=24323
Issue ID: 24323
Summary: x[0 .. 2] cast to Ty[2], x[$-2 .. $] does not?
Product: D
Version: D2
Hardware: All
URL: http://dlang.org/
OS: All
Status: NEW
Severity: normal
Priority: P3
Component: dmd
Assignee: nobody at puremagic.com
Reporter: turkeyman at gmail.com
void fn(ref const ubyte[2]);
void test(ubyte[] data)
{
fn(data[0 .. 2]); // <- call successfully
fn(data[$-2 .. $]); // <- fails: not callable using argument types `ubyte[]`
// this also fails:
size_t i = data.length - 2;
fn(data[i .. i+2]);
// this works:
fn(data[$-2 .. $][0 .. 2]);
}
I feel like the language should be able to determine that `$ - ($-2) == 2`. The
workaround is pretty dumb.
I can't possibly be the first one to report this, what's the reason? Just hard
to implement the bit of algebra required?
As long as there is just one variable term in a slice expression, and the rest
of the terms are all known at compile time, this equation can be easily solved.
I sure hope that $ symbol is only ever evaluated once inside a slice
expression, even in the presence of a custom opDollar?
--
More information about the Digitalmars-d-bugs
mailing list