[Issue 23319] New: std.range.Generator does not work with non-mutable elements
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Fri Sep 2 16:44:38 UTC 2022
https://issues.dlang.org/show_bug.cgi?id=23319
Issue ID: 23319
Summary: std.range.Generator does not work with non-mutable
elements
Product: D
Version: D2
Hardware: All
OS: All
Status: NEW
Severity: normal
Priority: P1
Component: phobos
Assignee: nobody at puremagic.com
Reporter: acehreli at yahoo.com
The following code is expected to work at least with types having no
indirections e.g. the value of an enum.
And it should work for immutable as well.
import std.range : generate;
void main() {
generate!(() => const(int)(42));
}
/usr/include/dlang/dmd/std/range/package.d(3808): Error: cannot modify `const`
expression `this.elem_`
/usr/include/dlang/dmd/std/range/package.d(3767): Error: template instance
`std.range.primitives.isInputRange!(Generator!(function () pure nothrow @nogc
@safe => 42))` error instantiating
/usr/include/dlang/dmd/std/range/package.d(3767): while evaluating:
`static assert(isInputRange!(Generator!(function () pure nothrow @nogc @safe =>
42)))`
/usr/include/dlang/dmd/std/range/package.d(3723): Error: template instance
`std.range.Generator!(function () pure nothrow @nogc @safe => 42)` error
instantiating
A fix would be to use Unqual inside std.range.Generator (but of course guarding
with std.traits.hasIndirections first):
Unqual!(ReturnType!fun) elem_;
--
More information about the Digitalmars-d-bugs
mailing list