We can use `.ptr` in slice and indexes expressions to bypass bounds verification but then we lose the opportunity to use `$` for the subscripts, even if an array and hence a `.length` is possible. I propose to enhance the semantics of `$` so that this code compiles and execute ```d void main() { auto b = new int[](2); b.ptr[0 .. $] = [1,2]; // b.ptr[0 .. b.length] = [1,2]; assert(b == [1,2]); b.ptr[$-1] = 3; assert(b == [1,3]); } ``` This would break nothing as this is currently rejected, e.g for the example with > Error: undefined identifier `$`
@SixthDot created dlang/dmd pull request #14716 "fix issue 23565 - Allow the use of `$` as index on `.ptr` expressions" fixing this issue: - fix issue 23565 - Allow the use of `$` as index on `.ptr` expressions We can use `.ptr` in slice and indexes expressions to bypass bounds verification but then we loose the opportunity to use `$` in the expression that give the subscripts, even if an array and hence a `.length` is possible. This commit fix the problem as long as the `.ptr` LHS is a (optionally dotted) variable The implementation is based on a front-end lowering as the existing system was not designed for this case (it finalize the substitution in the mid-end function `resolveLengthVar()`) https://github.com/dlang/dmd/pull/14716