https://issues.dlang.org/show_bug.cgi?id=22154
--- Comment #2 from Andrei Alexandrescu <[email protected]> --- (In reply to Mathias LANG from comment #1) > If we allow it, what prevents the function from then passing it down to > another pure function that will read / write to it ? Good point. There'd need to be appropriate restrictions, e.g. the address is read but not passed around. This issue prevents the application of the Null Object Pattern (https://en.wikipedia.org/wiki/Null_object_pattern) to Appender in Phobos. I started modifying the code around https://github.com/dlang/phobos/blob/master/std/array.d#L3264 like this: private static __gshared Data nullData = { 0, null, false }; private Data* _data = &nullData; It worked really nice because subsequently I could eliminate most tests comparing _data against null - they just worked with the empty data. The one place I had to test was at https://github.com/dlang/phobos/blob/master/std/array.d#L3356, where I replaced `if (!_data)` with `if (_data != &nullData)`. That made the function impure and caused a bunch of compile-time errors for no good reason. --
