June 29 [Issue 24637] New: [REG 2.104] Cannot insert const/immutable elements into DList | ||||
---|---|---|---|---|
| ||||
https://issues.dlang.org/show_bug.cgi?id=24637 Issue ID: 24637 Summary: [REG 2.104] Cannot insert const/immutable elements into DList Product: D Version: D2 Hardware: All OS: All Status: NEW Severity: regression Priority: P1 Component: dmd Assignee: nobody@puremagic.com Reporter: hos@hos.ac The following code does not compile with DMD >=2.104.2: ``` import std.container : DList; void main() { DList!int D; D.insert(1); // OK int i = 2; D.insert(i); // OK const c = 3; D.insert(c); // error D.insert(c + 1); // OK D.insert(c + c); // error } ``` with errors: ``` /usr/include/dmd/phobos/std/algorithm/mutation.d(1469): Error: cannot modify `const` expression `target` /usr/include/dmd/phobos/std/algorithm/mutation.d(1265): Error: template instance `std.algorithm.mutation.moveEmplaceImpl!(const(int))` error instantiating /usr/include/dmd/phobos/std/algorithm/mutation.d(1190): instantiated from here: `moveImpl!(const(int))` /usr/include/dmd/phobos/std/container/dlist.d(223): instantiated from here: `move!(const(int))` /usr/include/dmd/phobos/std/container/dlist.d(761): instantiated from here: `createNode!(const(int))` /usr/include/dmd/phobos/std/container/dlist.d(461): instantiated from here: `insertBeforeNode!(const(int))` list_const.d(12): instantiated from here: `insertBack!(const(int))` /usr/include/dmd/phobos/std/algorithm/mutation.d(1267): Error: template instance `std.algorithm.mutation.trustedMoveImpl!(const(int))` error instantiating /usr/include/dmd/phobos/std/algorithm/mutation.d(1190): instantiated from here: `moveImpl!(const(int))` /usr/include/dmd/phobos/std/container/dlist.d(223): instantiated from here: `move!(const(int))` /usr/include/dmd/phobos/std/container/dlist.d(761): instantiated from here: `createNode!(const(int))` /usr/include/dmd/phobos/std/container/dlist.d(461): instantiated from here: `insertBeforeNode!(const(int))` list_const.d(12): instantiated from here: `insertBack!(const(int))` ``` for `D.insert(c);`, or for `D.insert(c + c);` if we comment out the former. The expected behavior is that the code compiles. If we replace `DList` with `SList`, it compiles. If we replace `const` with `immutable`, it gives the same error. According to run.dlang.io, the code passes with DMD <=2.103.1. -- |
Copyright © 1999-2021 by the D Language Foundation