[Issue 22244] New: Key tail immutability should allow hashmap to be impl converted from immutable to mutable
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Fri Aug 27 09:03:18 UTC 2021
https://issues.dlang.org/show_bug.cgi?id=22244
Issue ID: 22244
Summary: Key tail immutability should allow hashmap to be impl
converted from immutable to mutable
Product: D
Version: D2
Hardware: x86_64
OS: Linux
Status: NEW
Severity: minor
Priority: P1
Component: dmd
Assignee: nobody at puremagic.com
Reporter: default_357-line at yahoo.de
Consider this code:
struct Key
{
immutable(int)[] reference;
}
struct Foo
{
immutable(int)[Key] hashmap;
}
void main()
{
immutable Foo foo = Foo();
Foo bar = foo;
}
'Key' is clearly tail-immutable.
So 'Foo' is likewise tail-immutable, because the values of 'hashmap' cannot be
changed, and the keys cannot be changed anyways - not by head, because key
heads cannot be changed in a hashmap period (cannot be referenced, cannot be
mutated), nor by tail, because Key is tail immutable.
There is a rule that tail immutable types can implicitly drop qualifier
immutability, because they don't expose any further mutability on their
referenced data that way.
Compare:
immutable string a;
string b = a;
So under the same logic, Foo should be able to convert to mutable.
(But it can't.)
--
More information about the Digitalmars-d-bugs
mailing list