https://d.puremagic.com/issues/show_bug.cgi?id=12282
[email protected] changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |[email protected] --- Comment #1 from [email protected] 2014-03-09 14:00:09 PDT --- I don't think that can work, at least, not without massive help from the compiler, and the language itself. Let's forget `array` itself for a moment. Basically, you want the `const(int)[]` to cast to `immutable(int)[]`. Both you and I know that this conversion is not legal. You are probably thinking: Since `array` is pure, then the "uniqueness" of the result should make the cast possible? Yes and no... The problem is that `array` *also* takes an array as an argument, which may reference mutable data, making the function weakly pure. The language has no way to know if the return value isn't aliasing something in the input argument. Take this example ```D void main() { int a[]; immutable b = array(); //OK immutable c = array(null); //OK immutable d = array(a); //OK? } const(int[]) array( ) pure {return (int[]).init;} const(int[]) array(const(int[]) p) pure {return p;} ``` Currently, 1) and 2) pass, but 3) fails. For a good reason. So, unless the language gives us some sort of "noalias" for the return value, I don't see how your request could be implemented. The only way I see for it to work would be for `array` to *actually* return an immutable when possible. But: 1) The code would be difficult to write. 2) It would break auto-inference, since the expected return is "const", and not "immutable". I'm not closing, because it is a valid request, but I don't see any way of making it happen. -- Configure issuemail: https://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
