Bug 5575 – Problem with a map() of a const uniq()

Status
NEW
Severity
normal
Priority
P3
Component
dmd
Product
D
Version
D2
Platform
x86
OS
Windows
Creation time
2011-02-14T11:03:24Z
Last change time
2024-12-13T17:54:48Z
Assigned to
No Owner
Creator
bearophile_hugs
Moved to GitHub: dmd#18329 →

Comments

Comment #0 by bearophile_hugs — 2011-02-14T11:03:24Z
D2 code. map() doesn't modify the input range, so I think this is correct (but I am not sure if it's correct. A mutable range of immutable items isn't the same thing as an immutable range): import std.algorithm; void main() { auto u1 = uniq([1]); auto m1 = map!q{ a }(u1); // OK const u2 = u1; auto m2 = map!q{ a }(u2); // Error } DMD 2.051 gives: ...\dmd\src\phobos\std\algorithm.d(109): Error: constructor std.algorithm.Map!(result,const(Uniq!(pred,int[]))).Map.this (Uniq!(pred,int[]) input) is not callable using argument types (const(Uniq!(pred,int[]))) ...\dmd\src\phobos\std\algorithm.d(109): Error: cannot implicitly convert expression (r) of type const(Uniq!(pred,int[])) to Uniq!(pred,int[]) test4.d(6): Error: template instance std.algorithm.map!(" a ").map!(const(Uniq!(pred,int[]))) error instantiating
Comment #1 by bearophile_hugs — 2012-02-03T15:41:44Z
This seems related, DMD 2.058head: import std.algorithm, std.array; void main() { auto s1 = "hello"; auto m1 = map!(c => c)(s1); auto a1 = array(m1); // OK auto s2 = "hello"d; auto m2 = map!(c => c)(s2); auto a2 = array(m2); // line 8, Error } ...\dmd2\src\phobos\std\array.d(55): Error: result[i] isn't mutable test.d(8): Error: template instance std.array.array!(Result) error instantiating
Comment #2 by robert.schadek — 2024-12-13T17:54:48Z
THIS ISSUE HAS BEEN MOVED TO GITHUB https://github.com/dlang/dmd/issues/18329 DO NOT COMMENT HERE ANYMORE, NOBODY WILL SEE IT, THIS ISSUE HAS BEEN MOVED TO GITHUB