On Tuesday, 30 June 2020 at 16:36:45 UTC, H. S. Teoh wrote:
And on that note, this implicit static -> dynamic array conversion is seriously a nasty misfeature that ought to be killed with fire. It leads to bugs like this:

        struct Database {
                int[] data;
                void set(int[] _data) {
                        data = _data;
                }
        }
        void myFunc(ref Database db) {
                int[3] x;
                db.set(x);      // oops
        }

If you want the compiler to stop you from accidentally keeping references to stack variables past the end of their scope, you need to annotate your functions @safe and compile with -preview=dip1000: https://run.dlang.io/is/3VdDaN

Furthermore, the problem your example shows has nothing to do with implicit static to dynamic array conversion, as without @safe the same error can easily be committed with non-array types: https://run.dlang.io/is/nBjibd

Reply via email to